首先简单了解一下JDBC和c3p0

Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标。我们通常说的JDBC是面向关系型数据库的。

C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate、Spring等。

在JDBC项目中,如果需要多个连接,如果一直获取连接再断开连接,会造成资源的极大浪费和占用。而在c3p0项目中,c3p0它有一个数据库池是用来管理客户端和数据库连接(Connection),有了这个池我们就不用自己来创建Connection,也不用担心频繁的连接断开操作造成的系统资源浪费很大,通过池来获取Connection对象,当使用完后,进行的资源释放c3po_utils.release(rs,conn,pstm)并不是直接把进程直接关掉,而是把从连接池占用的资源又还回去给池。

配置c3p0

首先

  下载官网c3p0:https://sourceforge.net/projects/c3p0/

  打开下载好的c3p0文件夹下的lib目录,可以看到c3p0-0.9.5.5.jar和mchange-commons-java-0.2.19.jar两个jar包

这里以IDEA为例

第二步,成功导入包后,我们配置一下c3p0的配置文件,c3p0不在properties文件中配置,而是在xml中配置

  在src下新建c3p0_config.xml文件

在新建好的c3p0_config.xml中加入配置

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<!-- 默认配置,如果没有指定则使用这个配置 -->
<default-config>
  //以下是数据库用户名、密码、被操作的数据表名地址、驱动类
<property name="user">root</property>
<property name="password">root</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/users</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
  //最大连接数、最小连接数、一次增长个数、初始可连接数
<property name="maxPoolSize">100</property>
<property name="minPoolSize">2</property>
<property name="acquireIncrement">5</property>
<property name="initialPoolSize">3</property>
  //最大等待连接时间、空闲连接测试个数、最大空闲时间、最大预缓存数  
<property name="checkoutTimeout">30000</property>
<property name="idleConnectionTestPeriod">30</property>
<property name="maxIdleTime">30</property>
<property name="maxStatements">200</property>
</default-config> <!-- 命名的配置,可以通过方法调用实现 -->
<named-config name="Mysql">
<property name="user">root</property>
<property name="password">root</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/users?useUnicode=true&amp;characterEncodeing=utf8&amp;useSSL=true</property>
<property name="driverClass">com.mysql.jdbc.Driver</property> <!-- 如果池中数据连接不够时一次增长多少个 -->
<property name="acquireIncrement">5</property> <!-- 初始化数据库连接池时连接的数量 -->
<property name="initialPoolSize">20</property> <!-- 数据库连接池中的最大的数据库连接数 -->
<property name="maxPoolSize">25</property> <!-- 数据库连接池中的最小的数据库连接数 -->
<property name="minPoolSize">5</property>
</named-config>
</c3p0-config>

编写c3p0工具类utils

package com.lsq.Utils_Study.Utils;
import com.mchange.v2.c3p0.ComboPooledDataSource;

import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; public class c3p0_Utils {
public static DataSource dataSource = null; static {
try {
//创建数据源工厂模式
dataSource = new ComboPooledDataSource("Mysql");//配置文件写法
}catch (Exception e){
e.printStackTrace();
}
}
//获取连接
public static Connection getConnection() throws SQLException{
return dataSource.getConnection();//从数据源中获取连接
}
//释放系统资源
public static void release(ResultSet rs, Connection conn, PreparedStatement pstm){
if (rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (pstm!=null){
try {
pstm.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

测试c3p0连接是否成功

package com.lsq;

import com.lsq.Utils_Study.Utils.c3p0_Utils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; public class c3p0_test {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstm = null;
ResultSet rs = null; try {
conn = c3p0_Utils.getConnection();
String sql = "select * from users where id=?";
pstm = conn.prepareStatement(sql);
pstm.setInt(1,1);
rs = pstm.executeQuery();
if (rs.next()){
System.out.println("查询成功");
System.out.println(rs.getString("NAME"));
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
c3p0_Utils.release(rs,conn,pstm);
}
}
}

 

c3p0的配置及简单应用的更多相关文章

  1. Win8.1下FreeImage.lib库的配置和简单使用(转)

    转自http://www.codeweblog.com/win8-1下freeimage-lib库的配置和简单使用/ 首先,你可以从这里获取FreeImage的完整库文件(访问密码 9a5e). 配置 ...

  2. c3p0详细配置

    c3p0详细配置 官方文档 : http://www.mchange.com/projects/c3p0/index.html <c3p0-config> <default-conf ...

  3. 开源IDE CodeBlocks的下载安装、配置、简单编程

    如果没有集成开发环境(IDE),在linux下开发程序将非常繁琐,IDE是指将编辑.编译.调试等功能集成在一个桌面环境上,这样就大大方便了用户.IDE一般包括代码编辑器.编译器.调试器和图形界面用户工 ...

  4. Solr配置与简单Demo[转]

    Solr配置与简单Demo 简介: solr是基于Lucene Java搜索库的企业级全文搜索引擎,目前是apache的一个项目.它的官方网址在http://lucene.apache.org/sol ...

  5. log4net日志的配置及简单应用

    在程序运行中,往往会出现各种出乎开发人员意料的异常或者错误,所以,记录详细的程序运行日志信息,有利于开发人员和运维人员排查异常信息,提高工作效率.而本菜鸟在大神推荐和指导下使用log4net这一插件工 ...

  6. CodeBlocks的下载安装、配置、简单编程

    CodeBlocks的下载安装.配置.简单编程 IDE简介 http://www.baidu.com/s?wd=codeblocks ,这里只是介绍Windows平台下的IDE环境配置. CodeBl ...

  7. asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程

    最近在学习张善友老师的NanoFabric 框架的时了解到Exceptionless : https://exceptionless.com/ !因此学习了一下这个开源框架!下面对Exceptionl ...

  8. go语言的安装、环境变量配置及简单使用

    go语言的安装.环境变量配置及简单使用 1.安装git并且配置在path中,默认就勾选了 下载地址https://git-scm.com/download/win 2.下载安装visualstudio ...

  9. ssdb主从及双主模型配置和简单管理

    ssdb主从及双主模型配置和简单管理 levelDB是一个key->value 的数据存储库,其只能在本地保存数据,支持持久化,并且支持保存非常大的数据,单机redis在保存较大数据的时候数十G ...

  10. InteliiJ IDEA的安装配置与简单使用

    小Alan前段时间一直在家里搬砖,已经很久没有接触技术了,从今天开始重拾技术,工欲善其事,必先利其器,以前在做Java开发的时候最常用的IDE就是Eclipse莫属了,不过随着岁月的流逝,在2016年 ...

随机推荐

  1. vue2+element表格拖拽

    1.定义好拖拽元素 ref标识,以及 row-key="id"  (row-key拖拽标识,拖拽后数据不会乱, id为tableDataNew数据对象id) 2.下载cnpm in ...

  2. Javaweb知识复习--MyBatis+Mapper代理开发

    一种持久层框架,主要用于简化JDBC MyBatis应用步骤 1.在数据库里面创建一个表 2.创建模块,导入坐标 就是新建一个Maven项目,在pom.xml里面导入mybatis相应导包依赖代码: ...

  3. (3) MasaFramework 入门第三篇,使用MasaFramework

    首先我们需要创建一个MasaFramework模板的项目,项目名称TokenDemo,项目类型如图所示 删除Web/TokenDemo.Admin项目,新建Masa Blazor Pro项目模板 项目 ...

  4. 磁盘IO 基本常识

    计算机硬件性能在过去十年间的发展普遍遵循摩尔定律,通用计算机的 CPU主频早已超过3GHz,内存也进入了普及DDR4的时代.然而传统硬盘虽然在存储容量上增长迅速,但是在读写性能上并无明显提升,同时SS ...

  5. [设计模式/网络/WebServer/Nginx]设计模式之代理模式(网络代理 : 正向代理与反向代理)【7】

    1 代理模式 1.1 模式定义 代理模式(Proxy Pattern):为其他对象提供一种代理服务以对这个被代理的对象进行控制访问.[ 设计模式.面向对象程序设计思想的鼻祖----GoF] Subje ...

  6. [Java]排序算法>交换排序>【冒泡排序】(O(N*N)/稳定/N较小/有序/顺序+链式)

    1 冒泡排序 1.1 算法思想 交换排序的基本思想:两两比较待排序记录的关键字,一旦发现2个记录不满足次序要求时,则:进行交换,直到整个序列全部满足要求为止. 1.2 算法特征 属于[交换排序] 冒泡 ...

  7. [Go] 递归获取目录下的文件

    操作示例: ./scan /Document/dir 代码: // 定义递归文件树结构体 type treeList struct { Path string `json:"path&quo ...

  8. 彻底解决VSCode无法远程ssh,提示The remote host may not meet VS Code Server‘s prerequisites for glibc and libstdc++

    彻底解决VSCode无法远程ssh,提示The remote host may not meet VS Code Server's prerequisites for glibc and libstd ...

  9. day01-Redis入门

    Redis入门 1.初始Redis 1.1认识NoSQL SQL(关系型数据库) NoSQL(非关系型数据库) 数据结构 结构化(Structured) 非结构化 数据关联 关联的(Relationa ...

  10. Deep-DRM算法理解

    title: GCN学习笔记 categories: - 生物信息学 date: 2023-03.13 hidden: true mathjax: true GCN GCN(Graph Convolu ...