一、什么是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的规范,所以在使用时会提示错误,一般功能的使用不会受到影响。