华南俳烁实业有限公司

java

當(dāng)前位置:中華考試網(wǎng) >> java >> java教程 >> 文章內(nèi)容

jdbc性能優(yōu)化

來(lái)源:中華考試網(wǎng)  [2020年11月12日]  【

  jdbc程序的性能主要由兩個(gè)因素決定,一是數(shù)據(jù)庫(kù)本身的性質(zhì),另一個(gè)是與數(shù)據(jù)庫(kù)相對(duì)愛貓撲.愛生活的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屬于這種類型

  (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ù)類優(yōu)化連接

  2.使用連接池 可以自己寫一個(gè)連接池 這樣程序的靈活性強(qiáng),便于移植.

  apache項(xiàng)目開發(fā)了一套非常通用而表現(xiàn)非常穩(wěn)定的對(duì)象池 http://jakarta.apache.org/commons/pool.htm

  設(shè)計(jì)了自己的連接池后 在客戶端調(diào)用建立對(duì)象

  public Object makeObject() throws Exception{

  Class.forName("oracle.jdbc.driver.OracalDriver");

  return DriverManager.getConnection("url","username","password");

  }

  銷毀對(duì)象時(shí)用

  public void destroyObject(Object obj) throws Exception{

  ((Connection)obj.close());

  }

  注意幾點(diǎn) 對(duì)象池里有沒有回收機(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){

  填寫下面表單即可預(yù)約申請(qǐng)免費(fèi)試聽java課程!害怕學(xué)不會(huì)?助教全程陪讀,隨時(shí)解惑!擔(dān)心就業(yè)?一地學(xué)習(xí),可全國(guó)推薦就業(yè)!

預(yù)約申請(qǐng)免費(fèi)聽java課程

  • 地區(qū):
  • 姓名:
  • 手機(jī):

  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)大查詢功能去組織數(shù)據(jù).這樣程序運(yùn)行是和數(shù)據(jù)庫(kù)服務(wù)的交互次數(shù)少,數(shù)據(jù)庫(kù)返回給

  程序的記錄條數(shù)少的多,所以性能有很大的提高.

責(zé)編:fushihao

上一篇:兩種Java容器類List和Set分析

下一篇: 沒有了

  • 會(huì)計(jì)考試
  • 建筑工程
  • 職業(yè)資格
  • 醫(yī)藥考試
  • 外語(yǔ)考試
  • 學(xué)歷考試
吉隆县| 邹城市| 靖州| 尚义县| 武川县| 左云县| 安西县| 玉门市| 临桂县| 明水县| 潼关县| 嘉黎县| 遵义县| 洪湖市| 古浪县| 新建县| 惠来县| 景德镇市| 敖汉旗| 遂川县| 桂东县| 岗巴县| 永宁县| 响水县| 慈溪市| 宁阳县| 黎平县| 永寿县| 德昌县| 夏邑县| 通许县| 嵊泗县| 万全县| 布拖县| 桓台县| 天台县| 普兰县| 河东区| 金坛市| 余干县| 博湖县|