C3P0连接池
目标
能够使用C3P0连接池
讲解
C3P0连接池简介
C3P0地址:https://sourceforge.net/projects/c3p0/?source=navbar
C3P0是一个开源的连接池。Hibernate框架,默认推荐使用C3P0作为连接池实现。
C3P0的jar包:c3p0-0.9.1.2.jar
C3P0常用的配置参数解释
参数 | 说明 |
---|---|
initialPoolSize | 刚创建好连接池时,连接池内包含的连接数量 |
maxPoolSize | 连接池中最多可以放多少个连接 |
checkoutTimeout | 连接池中没有连接时最长等待时间 |
maxIdleTime | 连接池中的空闲连接多久没有使用就会回收。默认是0,0表示不回收 |
C3P0配置文件
我们看到要使用C3P0连接池,需要设置一些参数。那么这些参数怎么设置最为方便呢?使用配置文件方式。
配置文件的要求:
文件名:c3p0-config.xml
放在源代码即src目录下
配置文件c3p0-config.xml
<c3p0-config>
<!-- 使用默认的配置读取连接池对象 -->
<default-config>
<!-- 连接参数 -->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/day16</property>
<property name="user">root</property>
<property name="password">root</property>
<!-- 连接池参数 -->
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">10</property>
<property name="checkoutTimeout">2000</property>
<property name="maxIdleTime">1000</property>
</default-config>
<named-config name="itheimac3p0">
<!-- 连接参数 -->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/day25</property>
<property name="user">root</property>
<property name="password">root</property>
<!-- 连接池参数 -->
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">15</property>
<property name="checkoutTimeout">2000</property>
<property name="maxIdleTime">1000</property>
</named-config>
</c3p0-config>
API介绍
com.mchange.v2.c3p0.ComboPooledDataSource类表示C3P0的连接池对象,常用2种创建连接池的方式:
1.无参构造,使用默认配置,
2.有参构造,使用命名配置
public ComboPooledDataSource()
无参构造使用默认配置(使用xml中default-config标签中对应的参数)public ComboPooledDataSource(String configName)
有参构造使用命名配置(configName:xml中配置的名称,使用xml中named-config标签中对应的参数)public Connection getConnection() throws SQLException
从连接池中取出一个连接
使用步骤
导入jar包c3p0-0.9.1.2.jar
编写c3p0-config.xml配置文件,配置对应参数
将配置文件放在src目录下
创建连接池对象ComboPooledDataSource,使用默认配置或命名配置
从连接池中获取连接对象
使用连接对象操作数据库
关闭资源
注意事项
C3P0配置文件名称必须为c3p0-config.xml
C3P0命名配置可以有多个
案例代码
准备数据
CREATE TABLE student (
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
age INT,
score DOUBLE DEFAULT 0.0
);配置文件
<c3p0-config>
<!-- 使用默认的配置读取连接池对象 -->
<default-config>
<!-- 连接参数 -->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/day25</property>
<property name="user">root</property>
<property name="password">root</property>
<!-- 连接池参数 -->
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">10</property>
<property name="checkoutTimeout">2000</property>
<property name="maxIdleTime">1000</property>
</default-config>
<named-config name="itheimac3p0">
<!-- 连接参数 -->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/day25</property>
<property name="user">root</property>
<property name="password">root</property>
<!-- 连接池参数 -->
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">15</property>
<property name="checkoutTimeout">2000</property>
<property name="maxIdleTime">1000</property>
</named-config>
</c3p0-config>java代码
public class Demo01 {
public static void main(String[] args) throws Exception {
// 方式一: 使用默认配置(default-config)
// new ComboPooledDataSource();
// ComboPooledDataSource ds = new ComboPooledDataSource();
// 方式二:使用命名配置(named-config:配置名)
// new ComboPooledDataSource("配置名");
ComboPooledDataSource ds = new ComboPooledDataSource("otherc3p0");
//for (int i = 0; i < 10; i++) {
//Connection conn = ds.getConnection();
//System.out.println(conn);
//}
// 从连接池中取出连接
Connection conn = ds.getConnection();
// 执行SQL语句
String sql = "INSERT INTO student VALUES (NULL, ?, ?, ?);";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "张三");
pstmt.setInt(2, 25);
pstmt.setDouble(3, 99.5);
int i = pstmt.executeUpdate();
System.out.println("影响的行数:" + i);
pstmt.close();
conn.close(); // 将连接还回连接池中
}
}
案例效果
1. 正常获取连接池中连接
2. 获取连接池中连接超时
3. 使用连接池中的连接往数据库添加数据
注意:配置文件名称必须为:c3p0-config.xml,将配置文件放在src目录下
使用配置文件方式好处
只需要单独修改配置文件,不用修改代码多个配置的好处:
可以连接不同的数据库:db1,db2
可以使用不同的连接池参数:maxPoolSize
可以连接不同厂商的数据库:Oracle或MySQL
小结
CP30使用步骤?
导入jar包c3p0-0.9.1.2.jar
编写c3p0-config.xml配置文件,配置对应参数
将配置文件放在src目录下
创建连接池对象ComboPooledDataSource,使用默认配置或命名配置
从连接池中获取连接对象
使用连接对象操作数据库
关闭资源
C3P0常用参数?