C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有hibernate,spring等。c3p0的出现,是为了大大提高应用程序和数据库之间访问效率的。
它的特性:
编码的简单易用
连接的复用
连接的管理
一、 C3p0 连接池配置
1.1、安装依赖包
首先要下载 C3p0 的依赖包,下载地址:https://sourceforge.NET/projects/c3p0/files/。将下载的包文件中lib下的c3p0-xxxx.jar和mchange-commons-Java-xxxx.jar导入工程依赖库中。
推荐使用 Maven 方式,自动化管理依赖包。
1.2、编辑 C3p0 配置文件
在工程的src下新建一个名为c3p0-config.xml的配置文件;内容为:
root
java
com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/jdbc
10
30
100
10
root
java
com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/jdbc
10
30
100
10
二、代码开发使用 C3p0连接池
2.1、ConnectionPool工具类
创建一个工具类,用于实例化连接池对象。
package com.study.cc;
import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class ConnectionPool {
private DataSource ds;
private static ConnectionPool pool;
private ConnectionPool(){
ds = new ComboPooledDataSource("mySource");
}
public static final ConnectionPool getInstance(){
if(pool==null){
try{
pool = new ConnectionPool();
}catch (Exception e) {
e.printStackTrace();
}
}
return pool;
}
public synchronized final Connection getConnection() {
try {
return ds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}
其中的mySource是c3p0-config.xml中named-config的name值。DataSource的实例使用ComboPooledDataSource来生成的。
2.2、代码使用连接池
业务代码通过调用工具类,申请和释放数据库连接对象,提交数据库操作语句。
package com.study.cc;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class TestMain {
public static void main(String[] args) {
ConnectionPool pool = ConnectionPool.getInstance();
Connection con = null;
PreparedStatement stmt= null;
ResultSet rs = null;
try{
con = pool.getConnection();
stmt = con.prepareStatement("select sysdate as nowtime from dual");
rs = stmt.executeQuery();
while(rs.next()){
System.out.println("nowtime="+rs.getString("nowtime"));
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
rs.close();
stmt.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}