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

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

JDBC3.0 新特性

2019-11-18 12:40:36
字體:
供稿:網(wǎng)友

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 定安县| 临洮县| 天全县| 邓州市| 云浮市| 陇西县| 永泰县| 志丹县| 南宁市| 德惠市| 会同县| 洛川县| 雅安市| 桐庐县| 都昌县| 仙游县| 阳高县| 都兰县| 宜兰市| 清镇市| 鲜城| 阳新县| 芮城县| 天津市| 高青县| 黄陵县| 会东县| 山阴县| 长治市| 逊克县| 临高县| 浮梁县| 沙洋县| 惠来县| 安陆市| 股票| 韶山市| 普洱| 翁牛特旗| 新密市| 岳阳县|