<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      JDBC數據庫連接池

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

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

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

      常用的開源鏈接池:

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

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


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

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

      dbcpconfig.propertes :

      #連接設置
      driverClassName=com.mysql.jdbc.Driver
      url=jdbc:mysql://localhost:3306/day17
      username=root
      password=hang
      
      #<!-- 初始化連接 -->
      initialSize=10
      
      #最大連接數量
      maxActive=50
      
      #<!-- 最大空閑連接 -->
      maxIdle=20
      
      #<!-- 最小空閑連接 -->
      minIdle=5
      
      #<!-- 超時等待時間以毫秒為單位 6000毫秒/1000等于60秒 -->
      maxWait=60000
      
      
      #JDBC驅動建立連接時附帶的連接屬性屬性的格式必須為這樣:[屬性名=property;] 
      #注意:"user" 與 "password" 兩個屬性會被明確地傳遞,因此這里不需要包含他們。
      connectionProperties=useUnicode=true;characterEncoding=utf8
      
      #指定由連接池所創建的連接的自動提交(auto-commit)狀態。
      defaultAutoCommit=true
      
      #driver default 指定由連接池所創建的連接的只讀(read-only)狀態。
      #如果沒有設置該值,則“setReadOnly”方法將不被調用。(某些驅動并不支持只讀模式,如:Informix)
      defaultReadOnly=
      
      #driver default 指定由連接池所創建的連接的事務級別(TransactionIsolation)。
      #可用值為下列之一:(詳情可見javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
      defaultTransactionIsolation=READ_COMMITTED


       

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

      JdbcUitls.java

      public class JdbcUtils {
      	
      	//DataSource是DBCP的數據庫連接池
      	private static DataSource ds=null;
      	
      	//既然是工具類,那就是拿來就能用的,不用new它
      	//這個靜態代碼塊確保其內容只運行一次,這里在第一次調用的時候,獲取一個工廠
      	static{
      		try{
      			//讀取資源文件
      			Properties prop =new Properties();
      			JdbcUtils.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");
      			
      			//DBCP的連接池工廠
      			BasicDataSourceFactory factory=new BasicDataSourceFactory();
      			//通過這個工廠,我們獲得一個根據資源文件配置的數據庫連接池
      			ds = factory.createDataSource(prop);			
      			
      		}catch (Exception e) {
      			throw new RuntimeException(e);
      		}
      	}
      	
      	//返回一個數據庫連接
      	public static Connection getConnection() throws SQLException{
      		//從DataSource中獲取一個空閑得連接并返回給調用它的方法
      		return ds.getConnection();
      	}	
      	
      }

       

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

      C3P0

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

       

      配置文件 c3p0-config.xml :

      <?xml version="1.0" encoding="UTF-8"?>
      <c3p0-config>
      	
      	<default-config>
      		
      		<property name="driverClass">com.mysql.jdbc.Driver</property>
      		<property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb</property>
      		<property name="user">root</property>
      		<property name="password">root</property>
      		
      		<property name="initialPoolSize">10</property>
      
      		<property name="maxIdleTime">30</property>
      		<property name="maxPoolSize">100</property>
      		<property name="minPoolSize">10</property>
      		<property name="maxStatements">200</property>
      		
      	</default-config>
      	
      	<-- named-config可以采取多個配置 -->
      	<named-config name="mysql">
      		<property name="acquireIncrement">50</property>
      
      		<property name="initialPoolSize">100</property>
      		<property name="minPoolSize">50</property>
      		<property name="maxPoolSize">1000</property><!-- intergalactoApp adopts a different approach to configuring statement caching -->
      		<property name="maxStatements">0</property>
      		<property name="maxStatementsPerConnection">5</property>
      		
      	</named-config>
      
      	
      
      </c3p0-config>

       

      示例:
      JdbcUtils_C3P0.java

      public class JdbcUtils_C3PO {
      
      
      	private static ComboPooledDataSource ds;
      	
      
      	static{
      
      		try{
      			//這個是加載配置文件
      
      			ds = new ComboPooledDataSource();
      
      			
      			//這個手動設置,不加載配置文件
      
      			/*ds.setDriverClass("com.mysql.jdbc.Driver");
      
      			ds.setJdbcUrl("jdbc:mysql://localhost:3306/day16");
      
      			ds.setUser("root");
      
      			ds.setPassword("root");
      
      			ds.setInitialPoolSize(20);*/
      
      		}catch (Exception e) {
      
      			throw new ExceptionInInitializerError(e);
      
      		}
      
      	}
      
      	
      
      	public static Connection getConnection() throws SQLException{
      
      		return ds.getConnection();   
      
      	}
      
      	
      
      }

      posted on 2011-07-02 18:44  黑暗伯爵  閱讀(1629)  評論(0)    收藏  舉報

      導航

      主站蜘蛛池模板: 免费无码又爽又刺激网站直播| 亚洲婷婷综合色高清在线| 天堂一区二区三区av| 亚洲精品国产自在久久| 国产在线精品福利91香蕉| 风流少妇bbwbbw69视频| 蜜桃av无码免费看永久| 日韩av一区二区三区精品| 欧美裸体xxxx极品| 四虎成人精品无码| 国产日女人视频在线观看| 亚洲中文字字幕精品乱码| 国产漂亮白嫩美女在线观看| 四虎成人精品在永久免费| 久久国产乱子精品免费女| 真人无码作爱免费视频| a级免费视频| 亚洲爆乳少妇无码激情| 青青草无码免费一二三区| 国产精品午夜剧场免费观看| 国产色悠悠综合在线观看| 国产不卡一区在线视频| 亚洲成A人片在线观看无码不卡| 亚洲深深色噜噜狠狠网站| 精品国产亚洲区久久露脸| 久久精品无码免费不卡 | 欧美人与动人物牲交免费观看 | 亚洲高清乱码午夜电影网| 人妻熟女一区无中文字幕| 国产一区精品综亚洲av| 精品无码久久久久国产电影| 男人用嘴添女人下身免费视频| 99精品国产一区二区三| 肥东县| 国产在线一区二区不卡| 久久天天躁狠狠躁夜夜躁2012| 欧洲免费一区二区三区视频| 亚洲一区二区三区久久受| 国产成人午夜福利高清在线观看| 人妻一区二区三区人妻黄色| 男女18禁啪啪无遮挡激烈网站|