c3p0數據庫連接池的使用詳解


  • 首先,什么是c3p0?下面是百度百科的解釋:

C3P0是一個開源的JDBC連接池,它實現了數據源和JNDI綁定,支持JDBC3規范和JDBC2的標准擴展。目前使用它的開源項目有Hibernate,Spring

 

  •   使用連接池和我們平時寫的JDBC代碼相比較有什么優點呢?

 

    • 資源重用

     由於數據庫連接得以重用,避免了頻繁創建,釋放連接引起的大量性能開銷。在減少系統消耗的基礎上,另一方面也增加了系統運行環境的平穩性。

    • 更快的系統反應速度:

     數據庫連接池在初始化過程中,往往已經創建了若干數據庫連接置於連接池中備用。此時連接的初始化工作均已完成。對於業務請求處理而言,直接利用現有可用連接,避免了數據庫連接初始化和釋放過程的時間開銷,從而減少了系統的響應時間。

    • 新的資源分配手段:

     對於多應用共享同一數據庫的系統而言,可在應用層通過數據庫連接池的配置,實現某一應用最大可用數據庫連接數的限制,避免某一應用獨占所有的數據庫資源。

    • 統一的連接管理,避免數據庫連接泄露:

     在較為完善的數據庫連接池實現中,可根據預先的占用超時設定,強制回收被占用連接,從而避免了常規數據庫連接操作中可能出現的資源泄露。

 

如何在自己的項目中使用c3p0呢?

  1. 導jar包:
  2. 兩種方式可以建立c3p0連接,第一種方式是代碼方式,Demo如下:
    package com.wang.utils; import java.beans.PropertyVetoException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import com.mchange.v2.c3p0.ComboPooledDataSource; public class JDBCutils { private static Connection conn; private static ComboPooledDataSource ds = new ComboPooledDataSource(); public static Connection getConnection() { try { ds.setDriverClass("com.mysql.jdbc.Driver"); ds.setJdbcUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF8&useServerPrepStmts=true&prepStmtCacheSqlLimit=256&cachePrepStmts=true&prepStmtCacheSize=256&rewriteBatchedStatements=true"); ds.setUser("root"); ds.setPassword("123"); conn = ds.getConnection(); } catch (SQLException e) { e.printStackTrace(); } catch (PropertyVetoException e) {
     e.printStackTrace(); } return conn; }

    第二種是使用讀取配置文件的方式,要求是,配置文件必須命名為c3p0-config.xml,並且放在src目錄下,配置文件如下:

    <?xml version="1.0" encoding="UTF-8" ?>
    <c3p0-config>
        <default-config> 
            <property name="jdbcUrl">
                <![CDATA[ jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF8&useServerPrepStmts=true&prepStmtCacheSqlLimit=256&cachePrepStmts=true&prepStmtCacheSize=256&rewriteBatchedStatements=true ]]>
            </property>
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <property name="user">root</property>
            <property name="password">123</property> 
           <!--當連接池中的連接耗盡的時候c3p0一次同時獲取的連接數。Default: 3 -->
            <property name="acquireIncrement">3</property>
           <!-- 初始化數據庫連接池時連接的數量 -->
            <property name="initialPoolSize">10</property>
            <!-- 數據庫連接池中的最小的數據庫連接數 -->
            <property name="minPoolSize">2</property>
            <!-- 數據庫連接池中的最大的數據庫連接數 -->
            <property name="maxPoolSize">10</property>
        </default-config>
    </c3p0-config>

    java代碼部分:

    package com.wang.utils; import java.beans.PropertyVetoException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import com.mchange.v2.c3p0.ComboPooledDataSource; public class JDBCutils { private static Connection conn; private static ComboPooledDataSource ds = new ComboPooledDataSource(); public static Connection getConnection() { try { conn = ds.getConnection(); } catch (SQLException e) { e.printStackTrace(); } catch (PropertyVetoException e) { e.printStackTrace(); } return conn; }

     

    注意,配置文件里可以寫多個數據庫配置,上面的配置文件代碼,我們是放在default-config標簽下,可以再添加一個用<named-config name="mysqlConfig">標簽修飾的配置,只需要在代碼中,將name的值,放在new ComboPooledDataSource("mysqlConfig")中即可,

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM