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

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

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

    posts - 22,comments - 35,trackbacks - 0

    jdbc程序的性能主要由兩個因素決定,一是數(shù)據(jù)庫本身的性質(zhì),另一個是與數(shù)據(jù)庫相對獨立的jdbc應(yīng)用程序接口(api)的使用.這里說的是如何正確使用jdbc編程接口,以獲得更好的性能.
      jdbc主要優(yōu)化有:
         1.選擇正確的jdbc驅(qū)動程序
         2.Connention的優(yōu)化  使用連接池來管理Connection對象
         3.Statement的優(yōu)化   使用批量更新等
         4.Result的優(yōu)化  正確的從數(shù)據(jù)庫中g(shù)et數(shù)據(jù)等
        
         (1)選擇正確的jdbc驅(qū)動程序:
      1 jdbc-odbc 橋
                2 本地api-部分 java驅(qū)動
                    3 jdbc網(wǎng)路協(xié)議-純java驅(qū)動
                    4 jdbc本地協(xié)議
                    最好選擇 jdbc網(wǎng)路協(xié)議-純java驅(qū)動  效率比較高  但需要第三方軟件的支持 比如corba  weblogic屬于這種類型
       
         (2)優(yōu)化Connection對象:
             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);
                 對象可以通過設(shè)置setDefaultRowPrefetch(int) 和 setDefaultBatchValue(int) 兩個參數(shù)類優(yōu)化連接

     2.使用連接池  可以自己寫一個連接池 這樣程序的靈活性強,便于移植.
          apache項目開發(fā)了一套非常通用而表現(xiàn)非常穩(wěn)定的對象池 http://jakarta.apache.org/commons/pool.htm
          設(shè)計了自己的連接池后 在客戶端調(diào)用建立對象
                               public Object makeObject() throws Exception{
        Class.forName("oracle.jdbc.driver.OracalDriver");
        return DriverManager.getConnection("url","username","password");
          }
                      銷毀對象時用
          public void destroyObject(Object obj) throws Exception{
             ((Connection)obj.close());
          }
            注意幾點 對象池里有沒有回收機制,對象池里有機有容量限制,對象池里有多少個閑置對象(可以釋放)       
     
            3.控制事務(wù)的提交  最好手動提交事務(wù),不但可以可以保證數(shù)據(jù)原子性,而且對新能提高留下余地.
                       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ù)的隔離級別   TRANSACTION_READ_UNCOMMITED  性能最高
                                         TRANSACTION_READ_COMMITED    快
                                         TRANSACTION_REFEATABLE_READ  中等
                RANSACTION_SERIALIZABLE      慢
     
       (3)Statement 優(yōu)化
          jdbc3個接口用來處理sql的執(zhí)行,是Statement PreparedStatement CallableStatement
              提供適當(dāng)?shù)腟tatement接口
              批量執(zhí)行sql
              從數(shù)據(jù)庫批量獲取數(shù)據(jù)
          PreparedStatement 比Statement性能要好 主要體現(xiàn)在一個sql語句多次重復(fù)執(zhí)行的情況
          PreparedStatemnt只編譯解析一次而Statement每次編譯一次.
         
          批量修改數(shù)據(jù)庫  
     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ù)庫中取數(shù)據(jù).
              通過setFetchSize()和getFectchSize()方法來設(shè)定和查看這個參數(shù).這個參數(shù)對體統(tǒng)的性能影響比較大.
              這個參數(shù)太小會嚴重地降低程序地性能.
       Connection Statement ResultSet都有這個參數(shù),他們對性能地影響順序是:
                 ResultSet---------Statement---------Connection
      (4)優(yōu)化ResultSet.
         體現(xiàn)在以下幾個方面
            批量讀取數(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動方向.有3個方向FETCH_FORWORD,FETCH_REVERSE FETCH_UNKNOWN
                 單向滾動性能比較高.
      其他方面的性能優(yōu)化
          及時顯示的關(guān)閉Connection Statement ResultSet
              其中Connection可以用Connetion Pool處理.
          使用數(shù)據(jù)庫系統(tǒng)的強大查詢功能去組織數(shù)據(jù).這樣程序運行是和數(shù)據(jù)庫服務(wù)的交互次數(shù)少,數(shù)據(jù)庫返回給
          程序的記錄條數(shù)少的多,所以性能有很大的提高.

    posted on 2006-03-03 00:05 kelven 閱讀(177) 評論(0)  編輯  收藏 所屬分類: java
    主站蜘蛛池模板: 国产偷国产偷亚洲高清人| 久久久久亚洲AV成人片| 美女羞羞免费视频网站| 精品久久久久久久免费加勒比| 亚洲入口无毒网址你懂的| 91免费国产在线观看| 亚洲伊人久久大香线蕉影院| 无码人妻一区二区三区免费手机 | 国产精一品亚洲二区在线播放| 黄桃AV无码免费一区二区三区| 国产成人综合亚洲AV第一页| 国产高清对白在线观看免费91| 国内精品久久久久久久亚洲| 国产精品免费一区二区三区| 国产v亚洲v天堂无码网站| 免费无码又爽又刺激高潮视频| 亚洲午夜精品一区二区公牛电影院| 91久久成人免费| 亚洲国产高清国产拍精品| 免费一级毛片正在播放| 好男人资源在线WWW免费| 五月天网站亚洲小说| 999国内精品永久免费观看| 涩涩色中文综合亚洲| 亚洲国产精品人人做人人爱| 中国一级特黄的片子免费 | 日本不卡高清中文字幕免费| 免费人成大片在线观看播放| 亚洲成在人天堂一区二区| 在线观看av永久免费| 青青久久精品国产免费看| 亚洲人成在线播放网站岛国| 中文字幕无码免费久久99 | 精品一区二区三区免费毛片爱| 亚洲一级大黄大色毛片| 亚洲福利在线播放| 久久久久久毛片免费播放| 亚洲色偷偷色噜噜狠狠99网| 亚洲夜夜欢A∨一区二区三区| **真实毛片免费观看| 亚洲变态另类一区二区三区|