暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

C3P0连接池的下载,配置及基本使用

老李的Java学习日记 2019-04-20
1372


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连接池,需要设置一些参数。那么这些参数怎么设置最为方便呢?使用配置文件方式。

配置文件的要求:

  1. 文件名:c3p0-config.xml

  2. 放在源代码即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.有参构造,使用命名配置

  1. public ComboPooledDataSource()
    无参构造使用默认配置(使用xml中default-config标签中对应的参数)
  2. public ComboPooledDataSource(String configName)
    有参构造使用命名配置(configName:xml中配置的名称,使用xml中named-config标签中对应的参数)
  3. public Connection getConnection() throws SQLException
    从连接池中取出一个连接

使用步骤

  1. 导入jar包c3p0-0.9.1.2.jar

  2. 编写c3p0-config.xml配置文件,配置对应参数

  3. 将配置文件放在src目录下

  4. 创建连接池对象ComboPooledDataSource,使用默认配置或命名配置

  5. 从连接池中获取连接对象

  6. 使用连接对象操作数据库

  7. 关闭资源

注意事项

C3P0配置文件名称必须为c3p0-config.xml

C3P0命名配置可以有多个

案例代码

  1. 准备数据

    CREATE TABLE student (
      id INT PRIMARY KEY AUTO_INCREMENT,
      NAME VARCHAR(20),
      age INT,
      score DOUBLE DEFAULT 0.0
    );
  2. 配置文件

     <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>
  3. 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目录下

使用配置文件方式好处

只需要单独修改配置文件,不用修改代码多个配置的好处:

  1. 可以连接不同的数据库:db1,db2

  2. 可以使用不同的连接池参数:maxPoolSize

  3. 可以连接不同厂商的数据库:Oracle或MySQL

小结

CP30使用步骤?

  1. 导入jar包c3p0-0.9.1.2.jar

  2. 编写c3p0-config.xml配置文件,配置对应参数

  3. 将配置文件放在src目录下

  4. 创建连接池对象ComboPooledDataSource,使用默认配置或命名配置

  5. 从连接池中获取连接对象

  6. 使用连接对象操作数据库

  7. 关闭资源

C3P0常用参数?



文章转载自老李的Java学习日记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论