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

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

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

    keep moving!

    We must not cease from exploration. And the end of all our exploring will be to arrive where we began and to know the place for the first time.
    隨筆 - 37, 文章 - 2, 評(píng)論 - 3, 引用 - 0
    數(shù)據(jù)加載中……

    JDBC性能優(yōu)化

    jdbc程序的性能主要由兩個(gè)因素決定,一是數(shù)據(jù)庫(kù)本身的性質(zhì),另一個(gè)是與數(shù)據(jù)庫(kù)相對(duì)獨(dú)立的jdbc應(yīng)用程序接口(api)的使用。這里說(shuō)的是如何正確使用jdbc編程接口,以獲得更好的性能。

    jdbc主要優(yōu)化有:

    1.選擇正確的jdbc驅(qū)動(dòng)程序

    2.Connention的優(yōu)化:使用連接池來(lái)管理Connection對(duì)象
    3.Statement的優(yōu)化:使用批量更新等
    4.Result的優(yōu)化:正確的從數(shù)據(jù)庫(kù)中g(shù)et數(shù)據(jù)等

    (1)選擇正確的jdbc驅(qū)動(dòng)程序:
    1、jdbc-odbc 橋
    2、本地api-部分 java驅(qū)動(dòng)
    3、jdbc網(wǎng)路協(xié)議-純java驅(qū)動(dòng)
    4、jdbc本地協(xié)議

    最好選擇jdbc網(wǎng)路協(xié)議-純java驅(qū)動(dòng),效率比較高,但需要第三方軟件的支持。比如corba、 weblogic屬于這種類(lèi)型

    (2)優(yōu)化Connection對(duì)象:
    1、設(shè)置適當(dāng)?shù)膮?shù)
    DriverManager.getConnection(String url,Properties props);
    例如:
    Properties props=new Properties();
    props.put("user","wuwei");
    props.put("password","wuwei");
    props.put("defaultRowPrefectch","30");
    props.put("dufaultBatchValue","5");
    Connection con=DriverManager.getConnection("jdbc:oracle:thin:@hostsString",props);
    對(duì)象可以通過(guò)設(shè)置setDefaultRowPrefetch(int) 和 setDefaultBatchValue(int) 兩個(gè)參數(shù)類(lèi)優(yōu)化連接

    2、使用連接池
    可以自己寫(xiě)一個(gè)連接池,這樣程序的靈活性強(qiáng),便于移植。
    apache項(xiàng)目開(kāi)發(fā)了一套非常通用而表現(xiàn)非常穩(wěn)定的對(duì)象池 http://jakarta.apache.org/commons/pool.htm
    設(shè)計(jì)了自己的連接池后,在客戶(hù)端調(diào)用建立對(duì)象:
    public Object makeObject() throws Exception{
    Class.forName("oracle.jdbc.driver.OracalDriver");
    return DriverManager.getConnection("url","username","password");
    }
    銷(xiāo)毀對(duì)象時(shí)用:
    public void destroyObject(Object obj) throws Exception{
    ((Connection)obj.close());
    }
    注意幾點(diǎn):對(duì)象池里有沒(méi)有回收機(jī)制,對(duì)象池里有機(jī)有容量限制,對(duì)象池里有多少個(gè)閑置對(duì)象(可以釋放)

    3、控制事務(wù)的提交
    最好手動(dòng)提交事務(wù),不但可以可以保證數(shù)據(jù)原子性,而且對(duì)新能提高留下余地。
    try{
    connection.setAutoCommint(false);
    // 代碼用PreparedStatement性能比Statementh好
    connection.commit();
    connection.setAutoCommit(true);
    }catch(SQLException e){
    }finally{
    //代碼
    if(connection!=null){
    connection.close();
    }
    }

    4、適當(dāng)?shù)倪x擇事務(wù)的隔離級(jí)別
    TRANSACTION_READ_UNCOMMITED 性能最高
    TRANSACTION_READ_COMMITED 快
    TRANSACTION_REFEATABLE_READ 中等
    RANSACTION_SERIALIZABLE 慢

    (3)Statement 優(yōu)化:
    jdbc3個(gè)接口用來(lái)處理sql的執(zhí)行,是Statement PreparedStatement CallableStatement提供適當(dāng)?shù)腟tatement接口批量執(zhí)行sql從數(shù)據(jù)庫(kù)批量獲取數(shù)據(jù)。
    PreparedStatement 比Statement性能要好 主要體現(xiàn)在一個(gè)sql語(yǔ)句多次重復(fù)執(zhí)行的情況。
    PreparedStatemnt只編譯解析一次而Statement每次編譯一次。

    批量修改數(shù)據(jù)庫(kù)
    Statement 提供方法addBatch(String)和executeBatch()
    調(diào)用方法為
    stmt.addBatch("isnert.....");
    stmt.addBatch("update.....");
    stmt.executeBatch();
    也可以用PreparedStatement從而更好的提高性能:
    pstmt=conn.preparedStatement("insert into test_table(......) values(....?)");
    pstmt.setString(1,"aaa");
    pstmt.addBatch();
    pstmt.setString(1,"bbb");
    pstmt.addBatch();
    .....
    pstmt.executeBatch();

    批量地從數(shù)據(jù)庫(kù)中取數(shù)據(jù):
    通過(guò)setFetchSize()和getFectchSize()方法來(lái)設(shè)定和查看這個(gè)參數(shù),這個(gè)參數(shù)對(duì)體統(tǒng)的性能影響比較大。這個(gè)參數(shù)太小會(huì)嚴(yán)重地降低程序的性能。
    Connection Statement ResultSet都有這個(gè)參數(shù),他們對(duì)性能地影響順序是:ResultSet---Statement---Connection

    (4)優(yōu)化ResultSet:
    體現(xiàn)在以下幾個(gè)方面:
    批量讀取數(shù)據(jù).合理設(shè)置ResultSet的getFetchSize()和setFetchSize()方法中的參數(shù)
    使用正確的get和set方法
    使用整數(shù)而不是字段名作為參數(shù)性能比較高

    例如:
    setInt(1,100);
    setString(2,"aaaa");

    setInt("id","100");
    setString("name","aaaa");
    性能好
    設(shè)置適當(dāng)?shù)臐L動(dòng)方向。有3個(gè)方向FETCH_FORWORD,FETCH_REVERSE FETCH_UNKNOWN,單向滾動(dòng)性能比較高。

    其他方面的性能優(yōu)化
    及時(shí)顯示的關(guān)閉Connection Statement ResultSet,其中Connection可以用Connetion Pool處理。
    使用數(shù)據(jù)庫(kù)系統(tǒng)的強(qiáng)大查詢(xún)功能去組織數(shù)據(jù)。這樣程序運(yùn)行是和數(shù)據(jù)庫(kù)服務(wù)的交互次數(shù)少,數(shù)據(jù)庫(kù)返回給程序的記錄條數(shù)少的多,所以性能有很大的提高。

    posted on 2008-09-07 02:22 大石頭 閱讀(247) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 基礎(chǔ)

    主站蜘蛛池模板: 一级日本高清视频免费观看| 亚洲欧洲日产国码二区首页| 亚洲AV永久无码精品一区二区国产 | 亚洲变态另类一区二区三区| 美美女高清毛片视频黄的一免费| 亚洲精品视频免费| 中文字幕无码视频手机免费看| 在线a毛片免费视频观看| 亚洲A丁香五香天堂网| 阿v免费在线观看| 亚洲精品乱码久久久久久不卡 | 亚洲熟妇无码八AV在线播放| 97久久精品亚洲中文字幕无码 | 免费国产黄网站在线观看可以下载| 在线观看人成网站深夜免费| 亚洲AV永久无码精品一福利| a级成人毛片免费视频高清| 99视频在线精品免费观看6| 亚洲AV成人片色在线观看 | 日本亚洲高清乱码中文在线观看| 久久w5ww成w人免费| 亚洲成AV人网址| 中文字幕免费在线视频| 国产一区二区免费在线| 亚洲AV无码成人专区| 最近的2019免费中文字幕| 久久精品国产精品亚洲色婷婷 | 亚洲av纯肉无码精品动漫| 亚洲成AV人在线观看网址| 麻豆成人久久精品二区三区免费| 亚洲乱码一二三四区国产| 免费无码成人AV在线播放不卡| 亚洲jizzjizz在线播放久| 777爽死你无码免费看一二区| 亚洲人成伊人成综合网久久| 国产在线19禁免费观看国产| 亚洲一区二区三区丝袜| 无码乱肉视频免费大全合集| 亚洲黄色在线网站| 免费看国产一级片| 久久ww精品w免费人成|