C3P0:
开源的数据库连接池。实现了数据源和JNDI的绑定,支持JDBC3和JDBC2的规范。
目前数据框架使用这些数据源配置 (Hibernate5,SpringData) 动态代理模式
JNDI:Java Naming Directory Interface: java命名目录接口规范。
目的:用户只关注结果,过程不关心(例如:驱动是什么,地址什么?。。。)
DBCP和C3P0区别:
DBCP没有自动回收空闲连接的功能。
C3P0能自动回收空闲连接
操作步骤
1.添jar包
2.C3P0配置文件(放在src根目录下)
用的时候 改一下数据库就行了
名字:c3p0-config.xml
代码:
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/mvc</property>
<property name="user">root</property>
<property name="password">123456</property>
<property name="initialPoolSize">10</property>
<property name="maxIdleTime">30</property>
<property name="maxPoolSize">100</property>
<property name="minPoolSize">10</property>
<property name="maxStatements">200</property>
</default-config>
</c3p0-config>
3.C3P0的Util工具类
package com.qf.util;
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;
public class C3P0Util {
private static ComboPooledDataSource dataSource = new ComboPooledDataSource();
//获取连接
public static Connection getConnection(){
try {
return dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("服务器繁忙");
}
}
//释放资源
public static void release(ResultSet rs,Statement stmt,Connection conn){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
rs=null;
}
if(stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
stmt=null;
}
if(conn!=null){
try {
conn.close();//运行的时候检查调用自己重写的 close() 连接还回取
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
conn=null;
}
}
}
4.C3P0测试类
package com.qf.c3p0.test;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import org.junit.Test;
import com.qf.util.C3P0Util;
public class C3P0TestCURD {
@Test
public void testInsert(){
Connection conn =null;
PreparedStatement ps=null;
try {
conn= C3P0Util.getConnection();
ps = conn.prepareStatement("insert into account values (null,'fff',1000)");
int i = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally{
C3P0Util.release(null, ps, conn);
}
}
}