国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

JDBC3.0新特性

2019-11-18 16:14:38
字體:
來源:轉載
供稿:網友

  概述 java 數據庫連接 3.0 規范的新功能和改進之處
  Josh Heidebrecht(jheidebr@ca.ibm.com)
  軟件工程師,IBM
  2001 年 7 月
  Java 數據庫連接(Java Database Connectivity,JDBC)API 是作為 Java 2 標準版(Java 2 Standard Edition,J2SE)和 Java 2 企業版(Java 2 EnterPRise Edition,J2EE)平臺的一個關鍵部分出現的。它是一種主要的基于標準的機制,能讓 Java 語言通過編程來訪問關系數據庫,所以當 Java Community Process 發布一份新版本的規范時,開發人員一定會感興趣。在此,我們就 Sun Microsystems 最近發布的 JDBC 規范的提議最終草案(Proposed Final Draft)3.0 版本來總結一下它的一些新的主要功能。加入討論論壇,與作者和其他讀者分享您對本文的看法。
  介紹
  Java 數據庫連接(JDBC)3.0 規范建立在其原本穩固的基礎上,增加了幾個新功能以彌補原來功能不足的地方。無論是 java.sql 還是第一次出現的 javax.sql 軟件包,都會包含在還處于測試階段的 Java 1.4 版平臺中。在今年晚些時候它就會被正式發布,到時 Java 開發人員就能夠利用這些改進了,所以現在正是開始了解這些改變的好時候。
  
  我們會簡單地討論一下 JDBC 的設計師們為這個版本所考慮到的幾個設計目標。理解了設計師們的設計基本原理,我們就可以更好地去理解那些改變。我們會總結一下規范中的幾個新功能以便了解整個 API 是怎樣被改變的。另外,我們還會深入研究幾個最適用于應用程序開發人員的關鍵功能,以成功地協助您利用其新性能。
  
  設計目標
  設計 JDBC 3.0 規范的初衷主要是讓原先的 JDBC 規范下的功能更加完美。因此,這個新規范的設計指導原則之一就是要與現存的應用程序和驅動程序保持兼容性。所以,JDBC 2 的用戶可以放心,他們的應用程序能在 JDBC 3.0 下正確運行。另外,使用以前那些遭反對的方法寫進 JDBC 1 API 的代碼也可以繼續運行。
  
  隨著 J2EE 平臺迅速的日益流行,設計師們也想增強 JDBC 的可伸縮性。新增的語句池和增強的連接池支持離實現這個目標還很遠。此外,設計師們還仔細地考慮 JDBC 與新的連接器體系結構之間的關系,來繼續提高服務器上的 Java 技術。
  
  在 JDBC 2 開發的過程中,SQL99 還處在一種變化不定的情況下。現在規范已經完成了,而且數據庫廠商已經采用了部分標準。所以自然地,JDBC 規范就跟著將自己與 SQL99 功能的一部分相統一。最新的 JDBC 規范已經采用了 SQL99 標準中那些已經被廣泛支持的功能,還有那些在五年內可能會獲得支持的功能。
  
  如果一個數據庫還不支持 JDBC 3.0 所支持的部分 SQL99 功能,驅動程序可以使用元數據 API 向應用程序開發人員表明:其底層數據庫不支持一部分 JDBC 功能。這一點允許數據庫廠商生產出相應的 JDBC 驅動程序,盡管他們可能不支持所有的功能。增加的兩種新的數據類型以及對事務的 Savepoint 的支持說明了兩個和 SQL99 有關的改變。
  
  新功能摘要
  
  元數據 API
  元數據 API 已經得到更新,DatabaseMetaData 接口現在可以檢索 SQL 類型的層次結構,一種新的 ParameterMetaData 接口可以描述 PreparedStatement 對象中參數的類型和屬性。
  
  CallableStatements 中已命名的參數
  在 JDBC 3.0 之前,設置一個存儲過程中的一個參數要指定它的索引值,而不是它的名稱。 CallableStatement 接口已經被更新了,現在您可以用名稱來指定參數。
  
  數據類型的改變
  JDBC 所支持的數據類型作了幾個改變,其中之一是增加了兩種新的數據類型。
  
  為了便于修改 CLOB(Character Large Object,字符型巨對象)、BLOB(Binary Large Object,二進制巨對象)和 REF(SQL 結構)類型的值,同名的數據類型接口都被更新了。接下來的是,因為我們現在能夠更新這些數據類型的值,所以 ResultSet 接口也被修改了,以支持對這些數據類型的列的更新,也包括對 ARRAY 類型的更新。
  
  增加的兩種新的數據類型是 java.sql.Types.DATALINK 和 java.sql.Types.BOOLEAN。新增的數據類型指的是同名的 SQL 類型。DATALINK 提供對外部資源的訪問或 URL,而 BOOLEAN 類型在邏輯上和 BIT 類型是等同的,只是增加了在語義上的含義。DATALINK 列值是通過使用新的 getURL() 方法從 ResultSet 的一個實例中檢索到的,而 BOOLEAN 類型是通過使用 getBoolean() 來檢索的。
  
  
  檢索自動產生的關鍵字
  為了解決對獲取自動產生的或自動增加的關鍵字的值的需求,JDBC 3.0 API 現在將獲取這種值變得很輕松。要確定任何所產生的關鍵字的值,只要簡單地在語句的 execute() 方法中指定一個可選的標記,表示您有興趣獲取產生的值。您感興趣的程度可以是 Statement.RETURN_GENERATED_KEYS,也可以是 Statement.NO_GENERATED_KEYS。在執行這條語句后,所產生的關鍵字的值就會通過從 Statement 的實例方法 getGeneratedKeys() 來檢索 ResultSet 而獲得。ResultSet 包含了每個所產生的關鍵字的列。清單 1 中的示例創建一個新的作者并返回對應的自動產生的關鍵字。
  
  清單 1. 檢索自動產生的關鍵字
  
  
  Statement stmt = conn.createStatement();
  
  // OBTain the generated key that results from the query.
  
  stmt.executeUpdate("INSERT INTO authors " +
  
  ′(first_name, last_name) " +
  
  "valueS (′George′, ′Orwell′)",
  
  Statement.RETURN_GENERATED_KEYS);
  
  ResultSet rs = stmt.getGeneratedKeys();
  
  if ( rs.next() ) {
  
  // Retrieve the auto generated key(s).
  
  int key = rs.getInt();
  
  }
  
  
  連接器關系
  大多數應用程序開發人員不需要知道 JDBC 和 J2EE 連結器體系結構之間的關系,就可以很好地使用 JDBC API。但是,由于 JDBC 3.0 規范已經考慮到這項新的體系結構,這使得開發人員能更好地理解 JDBC 在哪里適合 J2EE 標準,以及這個規范的發展方向是什么。
  
  J2EE 連結器體系結構指定了一組協議,允許企業的信息系統以一種可插入的方式連接到應用服務器上。這種體系結構定義了負責與外部系統連接的資源適配器。連接器服務提供者接口(The Connectors Service Provider Interface,SPI)恰好和 JDBC 接口提供的服務緊密配合。
  
  JDBC API 實現了連結器體系結構定義的三個協議中的兩個。第一個是將應用程序組件與后端系統相連接的連接管理,它是由 DataSource 和 ConnectionPoolDataSource 接口來實現的。第二個是支持對資源的事務性訪問的事務管理,它是由 XADataSource 來處理的。第三個是支持后端系統的安全訪問的安全性管理,在這點上,JDBC 規范并沒有任何對應點。盡管有最后那個不足,JDBC 接口仍能映射到連接器 SPI 上。如果一個驅動程序廠商將其 JDBC 驅動程序映射到連接器系統協議上,它就可以將其驅動程序部署為資源適配器,并立刻享受可插性、封裝和在應用服務器中部署的好處。這樣,一個標準的 API 就可以在不同種類的的企業信息系統中,供企業開發人員使用。
  
  ResultSet 可保持性
  一個可保持的游標(或結果),就是說該游標在包含它的事務被提交后,也不會自動地關閉。JDBC 3.0 增加了對指定游標可保持性的支持。要制定您 ResultSet 的可保持性,您必須在使用 createStatement()、prepareStatement() 或 prepareCall() 方法準備編寫一條語句時就這么做。可保持性可以是下面常量中的一個。
  
  HOLD_CURSORS_OVER_COMMIT ResultSet 對象(游標)沒有被關閉;它們在提交操作得到顯式的或隱式的執行以后仍保持打開的狀態。
  CLOSE_CURSORS_AT_COMMIT ResultSet 對象(游標)在提交操作得到顯式的或隱式的執行后被關閉。
  
  總的來說,在事務提交之后關閉游標操作會帶來更好的性能。除非您在事務結束后還需要該游標,否則您最好在執行提交操作后將其關閉。因為規范沒有規定 ResultSet 的缺省的可保持性,所以具體行為還將取決于執行情況。然而,我希望在可以使用 JDBC 3.0 驅動程序時,大多數執行在事務結束后仍舊會關閉游標。
  
  返回多重結果
  JDBC 2 規范的一個局限是,在任意時刻,返回多重結果的語句只能打開一個 ResultSet。作為 JDBC 3.0 規范中改變的一個部分,規范將允許 Statement 接口支持多重打開的 ResultSets。然而,重要的是 execute() 方法仍然會關閉任何以前 execute() 調用中打開的 ResultSet。所以,要支持多重打開的結果,Statement 接口就要加上一個重載的 getMoreResults() 方法。新式的方法會做一個整數標記,在 getResultSet() 方法被調用時指定前一次打開的 ResultSet 的行為。接口將按如下所示定義標記:
  
  CLOSE_ALL_RESULTS 當調用 getMoreResults() 時,所有以前打開的 ResultSet 對象都將被關閉。
  CLOSE_CURRENT_RESULT 當調用 getMoreResults() 時,當前的 ResultSet 對象將被關閉。
  KEEP_CURRENT_RESULT 當調用 getMoreResults() 時,當前的 ResultSet 對象將不會被關閉。
  
  清單 2 展示的是一個處理多重打開結果的示例。
  
  清單 2. 如何處理多重打開結果
  
  
  String procCall;
  
  // Set the value of procCall to call a stored procedure.
  
  // …
  
  
  CallableStatement cstmt = connection.prepareCall(procCall);
  
  int retval = cstmt.execute();

(出處:http://m.survivalescaperooms.com)



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 景谷| 报价| 威远县| 新昌县| 宁陵县| 余庆县| 秦安县| 苏尼特右旗| 陵川县| 扎兰屯市| 六盘水市| 咸丰县| 天长市| 武胜县| 岗巴县| 泰来县| 鹤山市| 皮山县| 台江县| 岚皋县| 德兴市| 六枝特区| 炎陵县| 德惠市| 常熟市| 托克逊县| 武邑县| 五华县| 东台市| 镶黄旗| 龙口市| 肇东市| 绥宁县| 城市| 房山区| 大冶市| 新巴尔虎右旗| 监利县| 馆陶县| 梨树县| 桐梓县|