今天学习数据库连接池的时候发现C3P0需要导入需要导入如下两个jar包,
否则会报错。这里附上jar包的下载链接。c3p0下载链接
顺便了解下使用c3p0连接池的方法。
首先我们需要知道为什么要使用连接池:因为jdbc没有保持连接的能力,一旦超过一定时间没有使用(大约几百毫秒),连接就会被自动释放掉,每次新建连接都需要140毫秒左右的时间而C3P0连接池会池化连接,随时取用,平均每次取用只需要10-20毫秒,所以如果是很多客户端并发随机访问数据库的话,使用连接池的效率会高。接下来我们看使用c3p0需要做那些准备:首先需要导入相对应的jar包:也就是上图的两个jar包,然后就是链接数据库的配置文件:c3p0-config.xml(必须叫这个名字),然后必须放在工程目录的src下面,c3p0-config.xml配置文件如下如下:
c3p0-config.xml:
<?xmlversion="1.0" encoding="UTF-8"?>
<c3p0-config>
<named-configname="mysql">
<!-- 数据库连接需要的4个字段 -->
<propertyname="driverClass">com.mysql.jdbc.Driver</property>
<propertyname="jdbcUrl">jdbc:mysql://localhost:3306/login?useUnicode=true&characterEncoding=utf8</property>
<propertyname="user">root</property>
<propertyname="password"></property>
<!-- 数据库连接池的一些配置 -->
<propertyname="acquireIncrement">3</property>
<propertyname="initialPoolSize">10</property>
<propertyname="maxIdleTime">30</property>
<propertyname="maxPoolSize">100</property>
<propertyname="minPoolSize">10</property>
<propertyname="maxStatements">200</property>
</named-config>
</c3p0-config>
注意:c3p0里面可以配置多个连接信息,可以给每个配置起个名字,这样可以方便的通过配置名称来切换配置信息。
C3P0Util.java:
packagecom.hh.mvcapp.db;
importjava.sql.Connection;
importjava.sql.PreparedStatement;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjavax.sql.DataSource;
importcom.mchange.v2.c3p0.ComboPooledDataSource;
publicclass C3P0Util {
static DataSource cpds=null;
static{
cpds= new ComboPooledDataSource("mysql");
System.out.println(cpds);
}
/**
* 获得数据库连接
*/
public static ConnectiongetConnection(){
try {
return cpds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
/**
* 数据库关闭操作
*/
public static void close(Connectionconn,PreparedStatement pst,ResultSet rs){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(pst!=null){
try {
pst.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
接下来是Junit测试类:
packagecom.hh.test;
importjava.sql.Connection;
importorg.junit.Test;
importcom.hh.mvcapp.db.C3P0Util;
publicclass C3P0UtilTest {
@Test
public void testGetConnection() {
Connectionconnection=C3P0Util.getConnection();
System.out.println(connection);
}
}