c3p0 是一个开源的JDBC连接池,它相对于DBCP和Druid来说有一个更方便的配置连接方式,就是自动读取配置文件。配置文件名:c3p0-config.xml,放置与src目录下。配置文件的demo如下:
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<!-- 默认读的配置文件 -->
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/testjdbc?characterEncoding=utf-8</property>
<property name="user">root</property>
<property name="password">123</property>
<property name="minPoolSize">5</property>
<property name="initialPoolSize">5</property>
</default-config>
<!-- 额外的,备用的数据库,比如oracle -->
<named-config name="mydb">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://192.168.200.200:3306/mydb?characterEncoding=utf-8</property>
<property name="user">root</property>
<property name="password">root</property>
<property name="minPoolSize">5</property>
<property name="initialPoolSize">5</property>
</named-config>
</c3p0-config>
默认的数据库连接使用的是<default-config>标签里的,其余的<named-config>可以有多个,当需要连接其它的数据库时,不需要再重新编辑配置文件,直接选择其它的数据库即可。在如下的测试代码中,在创建数据库连接池对象的时候可以传入参数来进行选择ComboPooledDataSource cpds = new ComboPooledDataSource();
,在空参的时候是选择默认的<default-config>数据库连接,传入<named-config>的名字就可以直接连接其它数据库。比如这里ComboPooledDataSource cpds = new ComboPooledDataSource("mydb");
,那么连接的就是mydb这个数据库。
测试c3p0:
package com.aa.c3p0;
import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import utils.JDBCUtils;
public class C3p0Demo {
public static void main(String[] args) {
Connection conn = null;
Statement stat = null;
ResultSet rs = null;
try {
//创建数据库连接池对象
ComboPooledDataSource cpds = new ComboPooledDataSource();
/*
//必选参数的设置
cpds.setDriverClass("com.mysql.jdbc.Driver");//和Druid不同,Druid传的是一个对象dds.setDriver(new Driver())
cpds.setJdbcUrl("jdbc:mysql:///testjdbc");
cpds.setUser("root");
cpds.setPassword("123");
*/
//从数据库连接池中获取连接对象
conn = cpds.getConnection();
stat = conn.createStatement();
String sql = "select * from users;";
rs = stat.executeQuery(sql);
while(rs.next()) {
System.out.println(rs.getString("username") + "---" + rs.getString("password"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.release(conn, stat, rs);
}
}
}