今天学习数据库连接池的时候发现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); } }