WebSphere數據庫更新技巧二則

發表于:2007-06-22來源:作者:點擊數: 標簽:
優化數據訪問不是一件容易的事情——即使程序的 性能 很差,應用也不會拋出異常;即使程序包含了許多差勁的JDBC用法,編譯器也不會發出警告;即使 網絡 快要被龐大的通信量吞噬,也沒有一種 數據庫 工具能夠方便地檢測出拙劣的數據請求。 然而,當你把JDBC應

     優化數據訪問不是一件容易的事情——即使程序的性能很差,應用也不會拋出異常;即使程序包含了許多差勁的JDBC用法,編譯器也不會發出警告;即使網絡快要被龐大的通信量吞噬,也沒有一種數據庫工具能夠方便地檢測出拙劣的數據請求。

然而,當你把JDBC應用連接到WebSphere應用服務器時,仍可以采取一些措施讓應用更加高效。例如,下面兩則技巧能夠有效地提高更新數據庫數據的性能。

  一、使用updateXXX方法

  雖然用程序代碼更新數據庫的辦法不一定適用于所有的場合,但大家應該已經試過用程序執行更新和刪除操作了。ResultSet對象的updateXXX方法讓我們不必構造復雜的SQL命令就可以執行數據更新操作,我們只要提供待更新的列和數據,然后在把游標移出結果集的當前行之前,調用updateRow方法更新數據庫。在下面的例子中,getInt方法提取出ResultSet對象Age列的值:

  int n = rs.getInt("Age");
  // n包含rs結果集中Age列的值
  . . .
  rs.updateInt("Age", 25);
  rs.updateRow();

  updateInt方法將Age列的值更新為25,updateRow方法更新數據庫中包含被修改數據的行。

  用程序代碼更新數據庫不僅改善了應用的可維護性,而且往往還提高了性能。這是因為,數據庫服務器已經在處理SELECT語句的過程中找到了待修改行的位置信息,不必再次執行代價昂貴的操作來尋找要修改的行。如果你確實需要該行的位置,數據庫服務器通常能夠提供可用行的內部指針,例如ROWID之類。

  二、使用getBestRowIndentifier

  利用getBestRowIndentifier(),我們可以確定在WHERE子句中最好用哪些列的集合。偽列通常是速度最快的數據訪問標識,但要確定這類列只能通過getBestRowIndentifier()。

  有些應用程序不能利用定位式數據更新和刪除方式的優勢,這時,可以通過調用getPrimaryKeys()或getIndexInfo()來找出屬于唯一性索引的列,再用所有可搜索的列構造WHERE子句。這個辦法一般都有效,只是可能使最后得到的查詢變得相當復雜??紤]下面這個例子:

  ResultSet WSrs = WSs.executeQuery
("SELECT user_name, ssn, address, city,
state, zip
FROM emp");
  // 提取數據
  ...
  WSs.executeQuery ("UPDATE EMP SET ADDRESS = ?
  WHERE user_name = ? and ssn = ?
  and address = ? and city = ? and state = ?
  and zip = ?");
  // 相當復雜的查詢

  應用程序應當調用getBestRowIndentifier()來找出唯一地標識數據庫記錄的最優列集合(也許是一個偽列)。許多數據庫管理系統支持一些特殊的列,這些列不是用戶在定義表結構的時候顯式定義的,而是每一個表都有的隱含列(例如,ROWID,TID)。這些列稱為偽列,由于它們的值通常是直接指向記錄精確位置的指針,因此通過偽列訪問數據通常是最快的訪問方式。另外,由于偽列不是用戶定義表結構的時候顯式定義的,所以調用getColumns方法返回的結果中不會包含偽列。要確定是否有偽列可用,應當調用getBestRowIndentifier()。

  如果數據源不包含特殊的偽列,getBestRowIndentifier()的結果集包含了指定表的最優唯一索引的列集合(如果存在唯一性索引的話)。也就是說,應用程序不必再調用getIndexInfo就可以得到最小的唯一性索引。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97