1. 程式人生 > >【JavaWeb】c3p0連接池與MySQL

【JavaWeb】c3p0連接池與MySQL

code pass 內容 try root c3p0連接池 body void 驅動

正文之前

在之前的文章講到了傳統的JDBC連接MySQL的方式,但是這樣的方式在進行多個連接時,就顯得效率低下,明顯不如連接池的效率,所以我們這次來講解一下JDBC連接池之一:c3p0


正文

1. 準備工作

  • IntelliJ IDEA
  • c3p0-0.9.5.2(jar)
  • MySQL

2. 配置 c3p0-config.xml

default-config

在配置之前,需要先進行建立數據庫的工作,本文還是采用上篇文章中的名為 customer 的數據庫

然後在工程的 src 目錄下新建一個名為 c3p0-config 的XML文件(文件名不能自定義)

然後開始配置:

        <!-- 數據庫地址 -->
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/customer</property>
        <!-- 數據庫驅動 -->
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <!-- 用戶名 -->
        <property name="user">root</property>
        <!-- 密碼 -->
        <property name="password">3865933</property>

先寫基本的數據庫信息,然後我們再來寫常用的連接池屬性,若要查詢全部屬性,可閱讀官網指南,屬性也包含於

        <!-- 連接池初始化時創建的連接數 -->
        <property name="initialPoolSize">1</property>
        <!-- 連接池中的最小連接數 -->
        <property name="minPoolSize">1</property>
        <!-- 連接池中的最小連接數 -->
        <property name="maxPoolSize">2</property>
        <!-- 無空閑連接可用時,可一次性創建新連接的數量 -->
        <property name="acquireIncrement">1</property>
        <!-- 獲取數據庫連接失敗後重復嘗試的次數 -->
        <property name="acquireRetryAttempts">1</property>
        <!-- 兩次連接的間隔時間,單位為毫秒 -->
        <property name = "acquireRetryDelay">1000</property>

給出完整的文件圖片:

技術分享圖片

named-config

可以添加 named-config 來增加數據庫配置,內容與default-config一致,我連接了另一個數據庫 product :

技術分享圖片

3. 寫個demo

先搞定數據源:

    private static ComboPooledDataSource dataSource1 = new ComboPooledDataSource("test");
    private static ComboPooledDataSource dataSource2 = new ComboPooledDataSource();

根據數據源,進行連接

    private static void getConnection(){
        try{
            Connection connection = dataSource1.getConnection();
            System.out.println("連接數據庫 product 成功!");
            connection.close();
            System.out.println("數據庫連接已關閉!");
        }catch(Exception e){
            System.out.println("連接數據庫失敗!");
        }
        try{
            Connection connection = dataSource2.getConnection();
            System.out.println("連接數據庫 customer 成功!");
            connection.close();
            System.out.println("數據庫連接已關閉!");
        }catch(Exception e){
            System.out.println("連接數據庫失敗!");
        }
    }
    public static void main(String[] args){
        getConnection();
    }

運行結果:

技術分享圖片

如果需要有多個連接,使用連接池是不二之選,關於c3p0的講解到此為止了,謝謝。

【JavaWeb】c3p0連接池與MySQL