java_JDBC连接池C3P0的使用

发布时间 2023-12-05 20:07:20作者: 败落

1、数据库连接池基本介绍
1.预先再缓冲池中放入一定数量的连接,当需要建立连接时,只需要从“缓冲池”中取出一个,使用完毕后放回。
2.数据库连接池负责分配、管理和释放数据库连接,它允许多个程序重复的使用现有的数据库连接,而不是重新建立一个。
3.当应用程序向连接池请求的数量超过最大连接数量时,这些请求将被加入到等待队列。


2、连接池的种类
1.C3P0数据库连接池,速度相对较慢,稳定性不错(hubernate,spring)。
2.DBCP数据库连接池,速度相对C3P0较快,但不是很稳定。
3.Druid(德鲁伊)是阿里提供的数据库的连接池,集DBCP,C3P0,Proxool有点于一身的数据库连接池。
等等…


3、C3P0数据库连接池实现
1.首相要将jar包引入到项目中

2.设置配置文件如下:在src目录下创建文件名 c3p0-config.xml 文件

代码如下:

<c3p0-config>
    <!--使用默认的配置读取数据库连接池对象 -->
    <default-config>
        <!--  连接参数 -->
        <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/MovieDB</property>
        <property name="user">root</property>
        <property name="password">SASA</property>

        <!-- 连接池参数 -->
        <!--初始化申请的连接数量-->
        <property name="initialPoolSize">5</property>
        <!--最大的连接数量-->
        <property name="maxPoolSize">10</property>
        <!--超时时间-->
        <property name="checkoutTimeout">3000</property>
    </default-config>
</c3p0-config>

 3.测试:
方法一:

import com.mchange.v2.c3p0.ComboPooledDataSource;

import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.SQLException;

public class Demo1 {
    public static void main(String[] args) throws Exception {
        method01();
    }
    // 方法一:手动设置连接参数
    public static void method01() throws PropertyVetoException, PropertyVetoException, SQLException {
        ComboPooledDataSource cpds = new ComboPooledDataSource();
        // 为连接池设置驱动
        cpds.setDriverClass("com.mysql.cj.jdbc.Driver");
        // 设置连接池连接数据库的参数
        cpds.setJdbcUrl("jdbc:mysql://localhost:3306/MovieDB");
        cpds.setUser("root");
        cpds.setPassword("SASA");
        // 设置初始化的连接数量
        cpds.setInitialPoolSize(5);
        // 设置最大连接数量
        cpds.setMaxPoolSize(10);
        // 测试连接速度
        long start = System.currentTimeMillis();
        for (int i = 0; i < 50000; i++) {
            Connection connection = cpds.getConnection();
            connection.close();
        }
        long end = System.currentTimeMillis();
        System.out.println("C3P0 所用时间:" + (end-start));
    }
}

 方法二:
配置文件:

<named-config name="otherc3p0">
            <!--  连接参数 -->
            <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://localhost:3306/MovieDB?serverTimezone=Asia/Shanghai</property>
            <property name="user">root</property>
            <property name="password">SASA</property>

            <!-- 连接池参数 -->
            <property name="initialPoolSize">5</property>
            <property name="maxPoolSize">8</property>
            <property name="checkoutTimeout">1000</property>
        </named-config>

 测试:

 // 方法二:使用配置文件创建连接池
    public static void method02() throws Exception{
        // 这里填写的参数,必须要和配置文件中 <name-config name ="zcc_mysql"></name-config> 一致
        ComboPooledDataSource cpds = new ComboPooledDataSource("otherc3p0");
        long start = System.currentTimeMillis();
        for (int i = 0; i < 500000; i++) {
            Connection connection = cpds.getConnection();
            connection.close();
        }
        long end = System.currentTimeMillis();
        System.out.println("C3P0 所用时间:" + (end-start)); // 1580
    }

 运行结果: