up:: Druid连接池的配置和使用

Druid是阿里巴巴的实现;C3P0是mchange的实现;

国内2014年之前的一些历史项目中使用C3P0的比较多;14年以后,阿里巴巴的Druid连接池使用的比较多;


1.下载C3P0

C3P0的官网:https://www.mchange.com/projects/c3p0/

C3P0是mchange这个机构下面的开源项目,也是一个不断更新的数据库连接池项目;


那么具体C3P0的下载如下:


2.将C3P0的jar包引入到工程中

首先,将俩jar包复制进工程的lib目录下;

然后,将C3P0的jar包加入到工程依赖中;


3.C3P0使用案例

(1)创建c3p0-config.xml

c3p0-config.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <c3p0-config>
        <default-config>
            <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://localhost:3306/imooc?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=Asia/Shanghai&amp;allowPublicKeyRetrieval=true</property>
            <property name="user">root</property>
            <property name="password">12345</property>
            <!-- 连接池初始连接数量 -->
            <property name="initialPoolSize">10</property>
            <!--最大连接数量-->
            <property name="maxPoolSize">20</property>
        </default-config>
    </c3p0-config>

c3p0-config.xml:说明:

(1)【c3p0-config】根节点不能随便写,需要按照c3p0的要求;

(2)【default-config】子节点:代表默认的配置信息;

(3)在xml中&是特殊字符,需要进行转义,即在xml中的&需要写成【&】;

(2)创建C3P0Sample类

    package com.imooc.jdbc.sample;
 
    import com.imooc.jdbc.common.DbUtils;
    import com.mchange.v2.c3p0.ComboPooledDataSource;
 
    import javax.sql.DataSource;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
 
    public class C3P0Sample {
        public static void main(String[] args) {
            //1.加载配置文件
            //2.创建DateSource
            // 因为C3P0配置文件的名字是定死的,必须是c3p0-config.xml,而且必须是放在src的根路径下(自然工程编译后,这个配置文件会到classes的根路径下),
            // 这样在执行new ComboPooledDataSource();的时候就会自动加载这个配置文件;并且根据这个配置文件创建DataSource数据源对象;
            DataSource dataSource = new ComboPooledDataSource();
            Connection conn = null;
            PreparedStatement pstmt = null;
            ResultSet rs = null;
            try {
                //3.得到数据库连接
                conn = dataSource.getConnection();
                pstmt = conn.prepareStatement("select * from employee limit 0,10");
                rs = pstmt.executeQuery();
                while (rs.next()) {
                    Integer eno = rs.getInt(1);
                    String ename = rs.getString("ename");
                    Float salary = rs.getFloat("salary");
                    String dname = rs.getString("dname");
                    System.out.println(dname + "-" + eno + "-" + ename + "-" + salary);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                /**
                 * 不使用连接池:conn.close()关闭连接;
                 * 使用连接池:conn.close()将连接回收至连接池;
                 */
                DbUtils.closeConnection(rs,pstmt,conn);
            }
        }
    }

C3P0Sample类的几点说明:

(1) 【1.加载配置文件】和【2.创建DateSource】只需一条代码就能完成:【DataSource dataSource = new ComboPooledDataSource();】

因为C3P0配置文件的名字是定死的,必须是c3p0-config.xml,而且必须是放在src的根路径下(自然工程编译后,这个配置文件会到classes的根路径下),这样在执行new ComboPooledDataSource();的时候就会自动加载这个配置文件;并且根据这个配置文件创建DataSource数据源对象;

(2) 和Druid类似,C3P0也可以观察其连接效果

C3P0Sample类运行效果: