C3P0连接池
一、导入jar包
在项目下边新建一个目录libs,然后把c3p0的两个jar包放在里边。然后选中两个jar包,右击>>add as library...
二、添加配置文件
将配置文件:c3p0-config.xml复制到src目录下,打开配置文件并修改配置信息。
配置信息如下:
<?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:3307/test_db</property>
<property name="user">root</property>
<property name="password">root1234</property>
<!--初始化申请的连接数量-->
<property name="initialPoolSize">5</property>
<!--最大的连接数量-->
<property name="maxPoolSize">10</property>
<!--超时时间,单位是毫秒-->
<property name="checkoutTimeout">3000</property>
</default-config>
<named-config name="otherc3p0">
</named-config>
</c3p0-config>
各个参数说明:
initialPoolSize:连接池初始化时创建的连接数
maxPoolSize:连接池最大连接数,如果获得新连接时会使连接总数超过这个值则停止申请并报错。
checkoutTimeout:配置当连接池所有连接用完时应用程序getConnection的等待时间。为0则无限等待直至有其他连接释放或者创建新的连接,不为0则当时间到的时候如果仍没有获得连接,则会抛出SQLException。
三、使用C3P0的默认连接池
在配置文件中可以配置多个连接池,<default-config></default-config>这个标签范围内的就是默认连接池的配置信息
1.在src下新建一个包cn.xj.datasource.c3p0,并在这个包下新建一个类c3p0_demo1
2.导入数据库驱动jar包
3.编写代码:在 c3p0_demo1类中编写代码
package cn.xj.datasource.c3p0;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
public class c3p0_demo1 {
public static void main(String[] args) throws SQLException {
//1.创建数据库连接池对象,没有传参,使用的就是默认连接池
DataSource ds = new ComboPooledDataSource();
//2.获取连接对象
Connection conn = ds.getConnection();
//3.打印连接对象
System.out.println(conn);
}
}
四、使用指定名称的C3P0连接池
配置文件如下:
<?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:3307/test_db</property>
<property name="user">root</property>
<property name="password">root1234</property>
<!--初始化申请的连接数量-->
<property name="initialPoolSize">5</property>
<!--最大的连接数量-->
<property name="maxPoolSize">10</property>
<!--超时时间,单位是毫秒-->
<property name="checkoutTimeout">3000</property>
</default-config>
<named-config name="otherc3p0">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3307/test_db</property>
<property name="user">root</property>
<property name="password">root1234</property>
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">8</property>
<property name="checkoutTimeout">1000</property>
</named-config>
</c3p0-config>
新建一个类c3p0_demo2代码如下:
package cn.xj.datasource.c3p0;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
public class c3p0_demo2 {
public static void main(String[] args) throws SQLException {
testNamedConfig();
}
public static void testNamedConfig() throws SQLException {
//1.创建数据库连接池对象,使用指定名称的连接池
DataSource ds = new ComboPooledDataSource("otherc3p0");
for (int i = 1 ; i<= 10 ; i++){
Connection conn = ds.getConnection();
System.out.println(i+":"+conn);
}
}
}
运行上边这个类,等待一秒后程序报错,说明我们使用的是otherc3p0这个连接池,因为otherc3p0这个连接池的最大连接数是8,而for循环执行了10次获取连接,所以程序报错