JDBC-C3P0连接池

C3P0连接池的使用

1.准备JAR包

(1)c3p0-0.9.5.2.jar C3P0的核心包

(2)mchange-commons-java-0.2.15 C3P0依赖的工具包

2.导入项目

3.配置连接池的方法

3.1 通过数据源对象配置

//创建一个数据源对象
    private static ComboPooledDataSource cpd = new ComboPooledDataSource();

    static{

        //1.配置驱动
        try {
            cpd.setDriverClass("com.mysql.cj.jdbc.Driver");
        } catch (PropertyVetoException e) {
            System.err.println("mysql驱动加载出错!");
            e.printStackTrace();
        }
        //2.设置URL
        cpd.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/huawei?autoReconnect=true&characterEncoding=UTF-8&serverTimezone=UTC");
        //3.设置用户名
        cpd.setUser("root");
        //4.设置密码
        cpd.setPassword("root123456");
        //5.设置连接池的大小
        cpd.setInitialPoolSize(20);
    }

3.2 通过properties 配置文件配置C3P0的内容

配置文件示例:配置文件一定要叫 c3p0.properties

c3p0.driverClass=com.mysql.cj.jdbc.Driver
c3p0.jdbcUrl=jdbc:mysql://127.0.0.1:3306/huawei?autoReconnect=true&characterEncoding=UTF-8&serverTimezone=UTC
c3p0.user=root
c3p0.password=root123456
c3p0.initialPoolSize=20
c3p0.maxIdleTime=60
c3p0.maxPoolSize=30

配置文件防止的位置在SRC根目录下

++IDEA最好创建一个Resource目录存放配置文件

配置好后如何获取连接?

//保证配置正确只需创建一个数据源对象就可以使用了
    private static ComboPooledDataSource cpd = new ComboPooledDataSource();

3.3 通过c3p0-config.xml 配置文件配置

将配置文件放在IDEA资源文件目录下即可(同properties文件)

c3p0-config.xml 配置示例

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <!-- 默认配置 -->
    <default-config>
        <!-- 驱动 -->
        <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
        <!-- jdbcUrl -->
        <!-- 1.将url使用转义标签<![CDATA[JDBCUrl]]>
             2.将&换为&amp;
        -->
        <property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/huawei?autoReconnect=true&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC</property>
        <!-- 用户名 -->
        <property name="user">root</property>
        <!-- 密码 -->
        <property name="password">root123456</property>
    </default-config>
</c3p0-config>

多数据源配置方式:

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <!-- 默认配置 -->
    <default-config>
        <!-- 驱动 -->
        <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
        <!-- jdbcUrl -->
        <!-- 1.将url使用转义标签<![CDATA[JDBCUrl]]>
             2.将&换为&amp;
        -->
        <property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/huawei?autoReconnect=true&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC</property>
        <!-- 用户名 -->
        <property name="user">root</property>
        <!-- 密码 -->
        <property name="password">root123456</property>
    </default-config>

    <!-- 数据源2 -->
    <named-config name="data2">
        <!-- 驱动 -->
        <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/mysql?autoReconnect=true&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC</property>
        <!-- 用户名 -->
        <property name="user">root</property>
        <!-- 密码 -->
        <property name="password">root123456</property>
    </named-config>
</c3p0-config>

配置完成后只需创建数据源对象即可:

++注意:数据源对象创建调用无参构造器代表调用的是默认配置数据源(default-config)

//创建一个数据源对象,构造器如果是无参构造器,加载默认数据源配置
    private static ComboPooledDataSource cpd = new ComboPooledDataSource();

++ 如果有参,则传入在xml配置中的<named-config name="data2">的name属性值加载对应数据源

private static ComboPooledDataSource cpd = new ComboPooledDataSource("data2");

4.获取连接

 /**
     * 从C3P0获取连接的方法
     * @return
     */
    public static Connection getCon() throws SQLException {

        Connection con = cpd.getConnection();//调用数据源对象的getConnection方法

        return con;

    }

5.归还连接

在C3P0中,归还连接的方法就是调用Connection对象的close方法

/**
     * 归还连接到C3P0
     * @param con
     */
    public static void returnCon(Connection con){
        try {
            con.close();
        } catch (SQLException e) {
            System.out.println("连接归还C3P0出错!");
            e.printStackTrace();
        }
    }
posted @   忙碌的高师傅  阅读(111)  评论(1编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示