C3P0数据库连接池的java实现
1、配置准备
- 导入 jar 包
- c3p0-0.9.2-pre1.jar
- mchange-commons-0.2.jar
- 数据库驱动包, 如:mysql-connector-java-5.1.28-bin.jar
- 配置文件名称必须叫 c3p0-config.xml
- 配置文件位置必须在 src 下
2、配置文件
<?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <!-- 这是默认配置信息 --> <default-config> <!-- 连接四大参数配置 --> <property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb3</property> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="user">root</property> <property name="password">123</property> <!-- 池参数配置 --> <!-- 连接池初始化时建立的连接数 默认值是 3 --> <property name="initialPoolSize">3</property> <!-- 连接的最大空闲时间 单位秒 默认是 0- 代表永远不会断开连接 超过设定时间的空闲连接将会断开 --> <property name="maxIdleTime">30</property> <!-- 连接池中拥有的最大连接数 默认值为 15 个 --> <property name="maxPoolSize">20</property> <!-- 连接池中保持的最小连接数 默认值为 3 个--> <property name="minPoolSize">3</property> <!-- 将连接池的连接数保持在 minpoolsize 必须小于 maxIdleTime 设置 默认值为 0 代表不处理 单位秒 --> <property name="maxIdleTimeExcessConnections">15</property><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">default-config</span><span style="color: rgba(0, 0, 255, 1)">></span> <span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> 专门为oracle提供的配置信息 </span><span style="color: rgba(0, 128, 0, 1)">--></span> <span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">named-config </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="oracle-config"</span><span style="color: rgba(0, 0, 255, 1)">></span> <span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">property </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="jdbcUrl"</span><span style="color: rgba(0, 0, 255, 1)">></span>jdbc:oracle:oci8:@dataname<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">property</span><span style="color: rgba(0, 0, 255, 1)">></span> <span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">property </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="driverClass"</span><span style="color: rgba(0, 0, 255, 1)">></span>oracle.jdbc.driver.OracleDriver<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">property</span><span style="color: rgba(0, 0, 255, 1)">></span> <span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">property </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="user"</span><span style="color: rgba(0, 0, 255, 1)">></span>root<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">property</span><span style="color: rgba(0, 0, 255, 1)">></span> <span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">property </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="password"</span><span style="color: rgba(0, 0, 255, 1)">></span>123<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">property</span><span style="color: rgba(0, 0, 255, 1)">></span> <span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">property </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="acquireIncrement"</span><span style="color: rgba(0, 0, 255, 1)">></span>3<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">property</span><span style="color: rgba(0, 0, 255, 1)">></span> <span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">property </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="initialPoolSize"</span><span style="color: rgba(0, 0, 255, 1)">></span>10<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">property</span><span style="color: rgba(0, 0, 255, 1)">></span> <span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">property </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="minPoolSize"</span><span style="color: rgba(0, 0, 255, 1)">></span>2<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">property</span><span style="color: rgba(0, 0, 255, 1)">></span> <span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">property </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="maxPoolSize"</span><span style="color: rgba(0, 0, 255, 1)">></span>10<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">property</span><span style="color: rgba(0, 0, 255, 1)">></span> <span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">named-config</span><span style="color: rgba(0, 0, 255, 1)">></span>
</c3p0-config>
3、实现案例
import java.beans.PropertyVetoException; import java.sql.Connection; import java.sql.SQLException;import org.junit.Test;
import com.mchange.v2.c3p0.ComboPooledDataSource;
/**
c3p0*/
public class Demo1 {
/**
代码配置,该配置不需要配置文件
@throws PropertyVetoException
@throws SQLException
*/
@Test
public void fun1() throws PropertyVetoException, SQLException {
// 创建连接池对象
ComboPooledDataSource dataSource = new ComboPooledDataSource();// 对池进行四大参数的配置
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/mydb");
dataSource.setUser("root");
dataSource.setPassword("123");// 池配置
dataSource.setAcquireIncrement(5);
dataSource.setInitialPoolSize(20);
dataSource.setMinPoolSize(2);
dataSource.setMaxPoolSize(50);Connection con = dataSource.getConnection();
System.out.println(con);
con.close(); // 该 close() 方法不是关闭连接,而是将连接归还给连接池。
}/**
配置文件的默认配置,若代码中同时存在配置,代码中的配置参数优先
@throws SQLException
*/
@Test
public void fun2() throws SQLException{
/**
- 在创建连接池对象时,这个对象就会自动加载配置文件!不用我们来指定
*/
ComboPooledDataSource dataSource = new ComboPooledDataSource();Connection con = dataSource.getConnection();
System.out.println(con);
con.close();
}/**
使用命名配置信息
@throws SQLException
*/
@Test
public void fun3() throws SQLException{
/**
- 构造器的参数指定命名配置元素的名称!
- <named-config name="oracle-config">
*/
ComboPooledDataSource dataSource = new ComboPooledDataSource("oracle-config");Connection con = dataSource.getConnection();
System.out.println(con);
con.close();
}
}