1. 程式人生 > 其它 >JDBC-C3P0連線池

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();
        }
    }