1 . C3P0:开源的数据库连接池。实现了数据源和JNDI的绑定,支持JDBC3和JDBC2的规范。
2 . 目前数据框架使用这些数据源配置 (Hibernate5,SpringData) 动态代理模式
3 . JNDI:Java Naming Directory Interface: java命名目录接口规范。
4 . 目的:用户只关注结果,过程不关心(例如:驱动是什么,地址什么?。。。)
5 . DBCP和C3P0区别:
DBCP没有自动回收空闲连接的功能。
C3P0能自动回收空闲连接
6 . c3p0使用步骤:
6.1.添加jar(mysql驱动, c3p0.jar)
6.2.编写配置文件(固定死的,位置和名称已经定好的) src根目录,c3p0-config.xml
6.3.获取数据源得到连接
7 .工具类
import java.sql.Connection;
import java.sql.SQLException;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class C3P0Utils {
private static ComboPooledDataSource ds =new ComboPooledDataSource();
public static Connection getConnection() {
try {
return ds.getConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
8 .测试类
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import org.junit.Test;
public class TestC3P0 {
@Test
public void test01() {
try {
Connection connection = C3P0Utils.getConnection();
System.out.println(connection);
PreparedStatement preparedStatement = connection.prepareStatement("select * from user");
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
System.out.println("=name="+resultSet.getString("name"));
}
} catch (Exception e) {
// TODO: handle exception
}
}
}
9.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/1713_transaction</property>
<property name="user">root</property>
<property name="password">123</property>
<property name="checkoutTimeout">30000</property>
<property name="idleConnectionTestPeriod">30</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>