1. <var id="fe6gj"></var>

    <rp id="fe6gj"><nav id="fe6gj"></nav></rp>

    <noframes id="fe6gj"><cite id="fe6gj"></cite>

    <ins id="fe6gj"><button id="fe6gj"><p id="fe6gj"></p></button></ins>
    1. <tt id="fe6gj"><i id="fe6gj"><sub id="fe6gj"></sub></i></tt>
        始創于2000年 股票代碼:831685
        咨詢熱線:0371-60135900 注冊有禮 登錄
        • 掛牌上市企業
        • 60秒人工響應
        • 99.99%連通率
        • 7*24h人工
        • 故障100倍補償
        您的位置: 網站首頁 > 幫助中心>文章內容

        JDBC數據庫連接池

        發布時間:  2012/8/23 16:51:43

        數據庫創建鏈接是比較消耗資源的,訪問量非常高的情況會造成內存溢出等等負面影響。

        大部分數據鏈接池解決了這個問題,一般的實現思路是這樣得:

        •鏈接池在初始化時首先獲取一定數量得鏈接并保存起來,程序請求鏈接時,直接由連接池返回一個,應用程序使用完后再歸還給鏈接池。
        •鏈接池維護一定數量的鏈接,當鏈接不夠時,根據用戶的相關配置采取策略,例如讓用戶等待直到有一個空閑的鏈接,或者從數據庫端獲得新的鏈接。 -
         
         
        點擊這里看代碼

        常用的開源鏈接池:


        DBCP
        dbcp是apache的,tomcat也采用了此鏈接池。

        使用需要導入兩個包
        commons-dbcp.jar
        commons-pool.jar


        使用示例(模板代碼)
        為了使代碼層次更清晰,減少耦合度并增加復用性,我們會將數據庫鏈接的類單獨抽取出來,它屬于工具類,可以歸為工具包中的類(比如:utils.JdbcUitls.java)

        dbcp將數據庫配置相關的信息單獨存放在.properties配置文件中,我們只需要將dbcp示例中的.properties文件考入工程中。

        dbcpconfig.propertes :

         
        01 #連接設置 

        02 driverClassName=com.mysql.jdbc.Driver 

        03 url=jdbc:mysql://localhost:3306/day17 

        04 username=root 

        05 password=hang 

        06   

        07 #<!-- 初始化連接 --> 

        08 initialSize=10 

        09   

        10 #最大連接數量 

        11 maxActive=50 

        12   

        13 #<!-- 最大空閑連接 --> 

        14 maxIdle=20 

        15   

        16 #<!-- 最小空閑連接 --> 

        17 minIdle=5 

        18   

        19 #<!-- 超時等待時間以毫秒為單位 6000毫秒/1000等于60秒 --> 

        20 maxWait=60000 

        21   

        22   

        23 #JDBC驅動建立連接時附帶的連接屬性屬性的格式必須為這樣:[屬性名=property;]  

        24 #注意:"user" 與 "password" 兩個屬性會被明確地傳遞,因此這里不需要包含他們。 

        25 connectionProperties=useUnicode=true;characterEncoding=utf8 

        26   

        27 #指定由連接池所創建的連接的自動提交(auto-commit)狀態。 

        28 defaultAutoCommit=true

        29   

        30 #driver default 指定由連接池所創建的連接的只讀(read-only)狀態。 

        31 #如果沒有設置該值,則“setReadOnly”方法將不被調用。(某些驅動并不支持只讀模式,如:Informix) 

        32 defaultReadOnly= 

        33   

        34 #driver default 指定由連接池所創建的連接的事務級別(TransactionIsolation)。 

        35 #可用值為下列之一:(詳情可見javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE 

        36 defaultTransactionIsolation=READ_COMMITTED

         
        配置好了,我們需要創建一個工具類,這個工具類自己封裝了數據庫鏈接池的實現,并向外提供了一個返回數據庫連接的方法  【 Linux公社 www.Linuxidc.com 】

        JdbcUitls.java

         
        01 public class JdbcUtils { 

        02       

        03     //DataSource是DBCP的數據庫連接池 

        04     private static DataSource ds=null; 

        05       

        06     //既然是工具類,那就是拿來就能用的,不用new它 

        07     //這個靜態代碼塊確保其內容只運行一次,這里在第一次調用的時候,獲取一個工廠 

        08     static{ 

        09         try{ 

        10             //讀取資源文件 

        11             Properties prop =new Properties(); 

        12             JdbcUtils.class.getClassLoader().getResourceAsStream("dbcpconfig.properties"); 

        13               

        14             //DBCP的連接池工廠 

        15             BasicDataSourceFactory factory=new BasicDataSourceFactory(); 

        16             //通過這個工廠,我們獲得一個根據資源文件配置的數據庫連接池 

        17             ds = factory.createDataSource(prop);             

        18               

        19         }catch (Exception e) { 

        20             throw new RuntimeException(e); 

        21         } 

        22     } 

        23       

        24     //返回一個數據庫連接 

        25     public static Connection getConnection() throws SQLException{ 

        26         //從DataSource中獲取一個空閑得連接并返回給調用它的方法 

        27         return ds.getConnection(); 

        28     }    

        29       

        30 }

         

        這樣我們在獲取連接的時候可以直接通過這個靜態類獲得,在使用完成后,保持良好的習慣去關閉這個連接,這個連接實質上不會關閉,會被連接池收回,DBCP使用了動態代理來截斷調用者對Connection.close()方法得直接操作。


        C3P0

        c3p0與dbcp一樣都是讀取配置文件

         

        配置文件 c3p0-config.xml :

         
        01 <?xml version="1.0" encoding="UTF-8"?> 

        02 <c3p0-config> 

        03       

        04     <default-config> 

        05           

        06         <property name="driverClass">com.mysql.jdbc.Driver</property> 

        07         <property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb</property> 

        08         <property name="user">root</property> 

        09         <property name="password">root</property> 

        10           

        11         <property name="initialPoolSize">10</property> 

        12   

        13         <property name="maxIdleTime">30</property> 

        14         <property name="maxPoolSize">100</property> 

        15         <property name="minPoolSize">10</property> 

        16         <property name="maxStatements">200</property> 

        17           

        18     </default-config> 

        19       

        20     <-- named-config可以采取多個配置 --> 

        21     <named-config name="mysql"> 

        22         <property name="acquireIncrement">50</property> 

        23   

        24         <property name="initialPoolSize">100</property> 

        25         <property name="minPoolSize">50</property> 

        26         <property name="maxPoolSize">1000</property><!-- intergalactoApp adopts a different approach to configuring statement caching -->

        27         <property name="maxStatements">0</property> 

        28         <property name="maxStatementsPerConnection">5</property> 

        29           

        30     </named-config> 

        31   

        32       

        33   

        34 </c3p0-config>

         

        示例:
        JdbcUtils_C3P0.java

         
        01 public class JdbcUtils_C3PO { 

        02   

        03   

        04     private static ComboPooledDataSource ds; 

        05       

        06   

        07     static{ 

        08   

        09         try{ 

        10             //這個是加載配置文件 

        11   

        12             ds = new ComboPooledDataSource(); 

        13   

        14               

        15             //這個手動設置,不加載配置文件 

        16   

        17             /*ds.setDriverClass("com.mysql.jdbc.Driver"); 

        18   

        19             ds.setJdbcUrl("jdbc:mysql://localhost:3306/day16"); 

        20   

        21             ds.setUser("root"); 

        22   

        23             ds.setPassword("root"); 

        24   

        25             ds.setInitialPoolSize(20);*/

        26   

        27         }catch (Exception e) { 

        28   

        29             throw new ExceptionInInitializerError(e); 

        30   

        31         } 

        32   

        33     } 

        34   

        35       

        36   

        37     public static Connection getConnection() throws SQLException{ 

        38   

        39         return ds.getConnection();    


        本文出自:億恩科技【www.endtimedelusion.com】

        服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]

      1. 您可能在找
      2. 億恩北京公司:
      3. 經營性ICP/ISP證:京B2-20150015
      4. 億恩鄭州公司:
      5. 經營性ICP/ISP/IDC證:豫B1.B2-20060070
      6. 億恩南昌公司:
      7. 經營性ICP/ISP證:贛B2-20080012
      8. 服務器/云主機 24小時售后服務電話:0371-60135900
      9. 虛擬主機/智能建站 24小時售后服務電話:0371-60135900
      10. 專注服務器托管17年
        掃掃關注-微信公眾號
        0371-60135900
        Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權所有  地址:鄭州市高新區翠竹街1號總部企業基地億恩大廈  法律顧問:河南亞太人律師事務所郝建鋒、杜慧月律師   京公網安備41019702002023號
          0
         
         
         
         

        0371-60135900
        7*24小時客服服務熱線

         
         
        av不卡不卡在线观看_最近2018年中文字幕_亚洲欧美一区二区三区_一级A爱做片免费观看国产_日韩在线中文天天更新_伊人中文无码在线