<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

    常用鏈接

    統計

    積分與排名

    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 閱讀(401) 評論(0)  編輯  收藏 所屬分類: Java

    主站蜘蛛池模板: 久久人午夜亚洲精品无码区| 午夜在线a亚洲v天堂网2019| 一级毛片a免费播放王色电影| 女人毛片a级大学毛片免费| 亚洲国产成人久久| 国产人在线成免费视频| 亚洲色欲啪啪久久WWW综合网| 成人无遮挡毛片免费看| 亚洲av中文无码乱人伦在线观看| 国产免费av片在线播放| 日韩免费码中文在线观看| 亚洲精品乱码久久久久久| 国产成人久久AV免费| 亚洲熟妇av一区二区三区下载| 国产成人无码免费看视频软件| 亚洲精品无播放器在线播放| 凹凸精品视频分类国产品免费| 国产免费福利体检区久久| 亚洲国产精品一区二区第一页| 久久久久久影院久久久久免费精品国产小说| 久久精品国产精品亚洲艾| 日韩版码免费福利视频| 怡红院亚洲红怡院在线观看| 久久久久国产亚洲AV麻豆 | 美女被免费网站视频在线| 亚洲人成网站色在线入口| 免费无码又爽又刺激网站| 亚洲专区一路线二| 免费人成网站在线高清| 久久一区二区三区免费播放| 久久亚洲精品国产亚洲老地址| 亚洲区不卡顿区在线观看| 最近2019中文字幕免费大全5| 亚洲欧美成人一区二区三区| 中文字幕亚洲天堂| 一个人免费观看视频www| 三年在线观看免费观看完整版中文| 亚洲校园春色小说| 国产精品V亚洲精品V日韩精品| 57pao国产成视频免费播放| 国产亚洲精品91|