love fish大鵬一曰同風起,扶搖直上九萬里

          導航

          <2006年6月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          公告

          留言簿(15)

          隨筆分類(493)

          隨筆檔案(498)

          相冊

          閱讀排行榜

          常用鏈接

          統計

          積分與排名

          friends

          link

          最新評論

          jakarta commons-dbcp 實現數據源操作(轉)

          1.DBCP簡介
          網絡程序的設計,很多都涉及到和關系型數據庫的交互操作,一般的操作方式都是使用的時候創建到數據庫的連
          接,然后進行各種操作,這種簡單的操作方式帶來的問題便是數據庫的頻繁的打開和關閉,以及Transtion的執
          行,這是一種很耗費時間和資源的操作。于是數據庫緩沖池DBCP就出現了,這個包是從pool包發展出來的。

          2.DBCP實現的基本流程
          1.創建enericObjectPool實例
          GenericObjectPool pool = new GenericObjectPool(null);
          2.創建PoolableConnectionFactory
          DriverManagerConnectionFactory cf =
          new DriverManagerConnectionFactory(
          "jdbc:mysql://host/db", "username", "password");
          PoolableConnectionFactory pcf =
          new PoolableConnectionFactory(
          CF, pool, null, "SELECT * FROM mysql.db", false, true);
          3.創建和注冊PoolingDriver
          new PoolingDriver().registerPool("myPool", pool);
          到此為止,數據庫緩沖池就創建完畢了.

          3.DataSource的實現過程
          DataSource在眾多的jsp容器和應用程序中都已經實現,在容器或者應用服務器啟動的時候,他會讀取相關的
          配置文件,自動完成DataSource的創建工作,我們一般只需要在服務器的配置文件中指定就可以了,這里貼出
          實現的過程,便于大家理解它內部的實現機制,便于編程參考。
          import javax.sql.DataSource;
          import java.sql.Connection;
          import java.sql.Statement;
          import java.sql.ResultSet;
          import java.sql.SQLException;
          import org.apache.commons.dbcp.BasicDataSource;
          public class BasicDataSourceExample {
          public static void main(String[] args) {
          // 創建BasicDataSource
          System.out.println("Setting up data source.");
          DataSource dataSource = setupDataSource(args[0]);
          System.out.println("Done.");
          //創建JDBC數據源
          Connection conn = null;
          Statement stmt = null;
          ResultSet rset = null;
          try {
          System.out.println("Creating connection.");
          conn = dataSource.getConnection();
          System.out.println("Creating statement.");
          stmt = conn.createStatement();
          System.out.println("Executing statement.");
          rset = stmt.executeQuery(args[1]);
          System.out.println("Results:");
          int numcols = rset.getMetaData().getColumnCount();
          while(rset.next()) {
          for(int i=1;i<=numcols;i++) {
          System.out.print("\t" + rset.getString(i));
          }
          System.out.println("");
          }
          } catch(SQLException e) {
          e.printStackTrace();
          } finally {
          try { rset.close(); } catch(Exception e) { }
          try { stmt.close(); } catch(Exception e) { }
          try { conn.close(); } catch(Exception e) { }
          }
          }
          //創建數據源
          public static DataSource setupDataSource(String connectURI) {
          BasicDataSource ds = new BasicDataSource();
          ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");
          ds.setUsername("scott");
          ds.setPassword("tiger");
          ds.setUrl(connectURI);
          return ds;
          }
          //提示數據源狀態
          public static void printDataSourceStats(DataSource ds) throws SQLException {
          BasicDataSource bds = (BasicDataSource) ds;
          System.out.println("NumActive: " + bds.getNumActive());
          System.out.println("NumIdle: " + bds.getNumIdle());
          }
          //關閉數據源
          public static void shutdownDataSource(DataSource ds) throws SQLException {
          BasicDataSource bds = (BasicDataSource) ds;
          bds.close();
          }
          }
          例子比較簡單,不再多說了~

          4.tomcat中DBCP的配置
          這里是以Mysql作為數據庫進行說明。
          使用DBCP,在 server.xml 中需要設置相關的連接及 dbcp 的參數值.
          <Context path="/MysqlTest" docBase="MysqlTest"
          debug="5" reloadable="true" crossContext="true">
          <Logger className="org.apache.catalina.logger.FileLogger"
          prefix="localhost_MysqlTest_log." suffix=".txt"
          timestamp="true"/>
          <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"/>
          <ResourceParams name="jdbc/TestDB">
          <parameter>
          <name>factory</name>
          <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
          </parameter>
          <parameter>
          <name>maxActive</name>
          <value>100</value>
          </parameter>
          <parameter>

          <name>maxIdle</name>

          <value>30</value>


          </parameter>


          <parameter>


          <name>maxWait</name>


          <value>10000</value>


          </parameter>


          <parameter>


          <name>username</name>


          <value>root</value>


          </parameter>


          <parameter>


          <name>password</name>


          <value>admin</value>


          </parameter>


          <parameter>


          <name>driverClassName</name>


          <value>org.gjt.mm.mysql.Driver</value>


          </parameter>


          <parameter>


          <name>url</name>


          <value>jdbc:mysql://localhost:3306/javatest?autoReconnect=true</value>


          </parameter>


          </ResourceParams>


          </Context>


          我們可以看到他使用的 dbcp factory 就是 org.apache.commons.dbcp.BasicDataSourceFactory


          5.參數說明


          *dataSource:要連接的 datasource (通常我們不會定義在 server.xml)


          *defaultAutoCommit:對于事務是否 autoCommit, 默認值為 true


          *defaultReadOnly:對于數據庫是否只能讀取, 默認值為 false


          *driverClassName:連接數據庫所用的 JDBC Driver Class,


          *maxActive:最大連接數據庫連接數,設 0 為沒有限制


          *maxIdle:最大等待連接中的數量,設 0 為沒有限制


          *maxWait:最大等待秒數, 單位為 ms, 超過時間會?G出錯誤信息


          *password:登陸數據庫所用的密碼


          *url:連接數據庫的 URL


          *username:登陸數據庫所用的帳號


          *validationQuery:驗證連接是否成功, SQL SELECT 指令至少要返回一行


          *removeAbandoned:是否自我中斷, 默認是 false


          *removeAbandonedTimeout:幾秒后會自我中斷, removeAbandoned 必須為 true


          *logAbandoned:是否記錄中斷事件, 默認為 false


          6.總結


          DBCP一般應用在數據庫的使用非常頻繁的情況下使用,它可以處理大量的數據庫的連接請求,不失為做大型站


          點的首選數據庫配置


          7.參考資料


          *jakarta commons


          http://jakarta.apache.org/commons/


          *jakarta commons-dbcp


          http://jakarta.apache.org/commons/dbcp


          *jakarta commons-dbcp api


          http://jakarta.apache.org/commons/dbcp/apidocs/index.html


          *CVS資料


          http://cvs.apache.org/viewcvs.cgi/jakarta-commons/dbcp/doc/

          ?

          ?

          posted on 2006-06-13 08:33 liaojiyong 閱讀(402) 評論(0)  編輯  收藏 所屬分類: Java

          主站蜘蛛池模板: 华池县| 邳州市| 客服| 二手房| 民和| 恩施市| 梨树县| 利津县| 北票市| 新巴尔虎左旗| 满城县| 泰兴市| 保定市| 镇坪县| 滨州市| 沁阳市| 克山县| 红桥区| 高台县| 阳东县| 苏尼特左旗| 扎鲁特旗| 凭祥市| 吉安县| 天水市| 凤凰县| 历史| 山东| 龙井市| 乐昌市| 醴陵市| 博客| 天津市| 北安市| 瑞昌市| 年辖:市辖区| 察哈| 历史| 张掖市| 沾益县| 保康县|