一、什么是C3P0
C3P0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。
二、下载及使用
最新的版本可以在这个网址:http://sourceforge.net/projects/c3p0/ 下载,本文为此,最新版本为0.9.1.2,使用方法非常简单,只要把lib文件夹中的c3p0-0.9.1.2.jar文件放在你的第三方包引用路径中就行了。
然后我们编写一个类,作为连接池。
import java.beans.PropertyVetoException;
import java.sql.Connection;
import com.mchange.v2.c3p0.ComboPooledDataSource;
/**
* 数据库连接池
*
* @author tntxia
*
*/
public class Connections {
/**
* 数据库连接池 使用C3P0数据库连接池 避免大量的数据库连接影响数据库性能
*/
private static ComboPooledDataSource ds = new ComboPooledDataSource();
/**
* 数据库连接池初始化
*/
static {
ds.setJdbcUrl("jdbc:mysql://localhost:3306/puzzle");
ds.setUser("root");
ds.setPassword("root");
ds.setAcquireIncrement(15);
ds.setInitialPoolSize(20);
ds.setMinPoolSize(10);
ds.setMaxPoolSize(500);
ds.setAcquireRetryAttempts(5);
ds.setMaxIdleTime(10);
ds.setCheckoutTimeout(5000);
try {
ds.setDriverClass("com.mysql.jdbc.Driver");
} catch (PropertyVetoException e) {
}
ds.setMaxStatements(0);
}
public static Connection getConnection() {
Connection conn = null;
try {
conn = ds.getConnection();
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
}
这样,我们不再每次都去生成一个数据库连接,而是Connections.getConnection()方法,从连接池里面获取一个数据库链接,避免了生成数据库链接,而且还可以重复使用一些数据库连接。
注意:c3p0使用了JDBC 2 的规范,有一个数据库的驱动没有完成JDBC 2的规范,所以在使用时会提示错误,一般功能的使用不会受到影响。