C3P0连接池

一、导入jar包

在项目下边新建一个目录libs,然后把c3p0的两个jar包放在里边。然后选中两个jar包,右击>>add as library...

  C3P0连接池

 

 二、添加配置文件

将配置文件: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包

  C3P0连接池

 

 

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次获取连接,所以程序报错

上一篇:c#-System.Data.SqlClient.SqlException:必须声明标量变量“ @”


下一篇:java-如何捕获数据的SQLException? (例如,数据不存在)