一、导入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。
三、使用默认连接池
在配置文件中可以配置多个连接池,<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); } }
四、使用指定名称的连接池
配置文件如下:
<?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次获取连接,所以程序报错