JDBC 3.0 有什麼新特性 (轉)
後設資料
後設資料 API 已經得到,DatabaseMetaData
介面現在可以檢索 型別的層次結構,一種新的 ParameterMetaData
介面可以描述 PreparedStatement
中引數的型別和屬性。
CallableStatements 中已命名的引數
在 JC 3.0 之前,設定一個過程中的一個引數要指定它的值,而不是它的名稱。 CallableStatement
介面已經被更新了,現在您可以用名稱來指定引數。
資料型別的改變
所支援的資料型別作了幾個改變,其中之一是增加了兩種新的資料型別。
為了便於修改 CLOB(Character Large ,字元型巨物件)、BLOB(Binary Large OBject,二進位制巨物件)和 REF(SQL 結構)型別的值,同名的資料型別介面都被更新了。接下來的是,因為我們現在能夠更新這些資料型別的值,所以 ResultSet
介面也被修改了,以支援對這些資料型別的列的更新,也包括對 ARRAY 型別的更新。
增加的兩種新的資料型別是 .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 中的示例建立一個新的作者並返回對應的自動產生的關鍵字。
聯結器關係
大多數應用開發人員不需要知道 JDBC 和 連結器體系結構之間的關係,就可以很好地使用 JDBC API。但是,由於 JDBC 3.0 規範已經考慮到這項新的體系結構,這使得開發人員能更好地理解 JDBC 在哪裡適合 J2EE 標準,以及這個規範的發展方向是什麼。
J2EE 連結器體系結構指定了一組,允許企業的資訊以一種可插入的方式連線到應用上。這種體系結構定義了負責與外部系統連線的資源介面卡。聯結器服務提供者介面(The Connectors Service Provr Interface,SPI)恰好和 JDBC 介面提供的服務緊密配合。
JDBC API 實現了連結器體系結構定義的三個協議中的兩個。第一個是將應用程式與後端系統相連線的連線管理,它是由 Data
和 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
物件將不會被關閉。
連線池
JDBC 3.0 定義了幾個標準的連線池屬性。開發人員並不需要直接地用 API 去修改這些屬性,而是透過應用伺服器或資料儲存裝置來實現。由於開發人員只會間接地被連線池屬性的標準化所影響,所以有利之處並不明顯。然而,透過減少廠商特定設定的屬性的數量並用標準化的屬性來代替它們,開發人員能更容易地在不同廠商的 JDBC 驅動程式之間進行。另外,這些屬性還允許管理員很好地連線池,從而使應用程式的效能特點發揮到極致。這些屬性如下表所示。
屬性名稱描述 maxStatements
連線池可以保持開啟的語句數目。 initialPoolSize
當池初始化時可以建立的物理連線的數目。 minPoolSize
池可以包含的物理連線的最小數目。 maxPoolSize
池可以包含的物理連線的最大數目。零指沒有最大值。 maxIdleTime
持續時間,以秒計,指一個閒置的物理連線在被關閉前可以在池中停留的時間。零指沒有限制。 propertyCycle
間隔時間,以秒計,指連線池在執行其屬性策略前可以等待的時間。
預備語句池
除了改進對連線池的支援以外,現在也能緩衝預備語句了。預備語句允許您用一條常用的 SQL 語句然後預編譯它,從而在這條語句被多次執行的情況下大幅度地提升效能。在另一個方面,建立一個 PreparedStatement
物件會帶來一定量的系統開銷。所以,在理想情況下,這條語句的生命週期應該足夠長,以補償它所帶來的系統開銷。追求效能的開發人員有時候為了延長 PreparedStatement
物件的生命週期會不惜扭曲他們的物件模型。JDBC 3.0 讓開發人員不再為此擔心,因為資料來源層現在負責為預備語句進行快取。
也許在 JDBC 3.0 中最令人興奮的附加特點就是 Savepoint 了。JDBC 2 中的事務支援讓開發人員可以控制對資料的併發訪問,從而保證持續資料總是保持一致的狀態。可惜的是,有時候需要的是對事務多一點的控制,而不是在當前的事務中簡單地對每一個改變進行回滾。在 JDBC 3.0 下,您就可以透過 Savepoint 獲得這種控制。Savepoint
介面允許您將事務分割為各個邏輯斷點,以控制有多少事務需要回滾。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-984534/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Rails 5 有什麼新特性?AI
- Servlet 3.0 新特性Servlet
- Vue3.0新特性Vue
- jQuery 3.0 的新特性jQuery
- Solon 3.0 新特性:SqlUtilsSQL
- iPhone X 50大特性彙總 iPhoneX有什麼新特性iPhone
- 常見面試題:java8有什麼新特性?面試題Java
- python有什麼特性?為什麼這麼火?Python
- 面試官:Dubbo是什麼,他有什麼特性?面試
- 什麼是Docker?Docke有哪些特性?Docker
- JDK6.0與JDK4.0相比有什麼新特性JDK
- Vue.js 3.0 新特性預覽Vue.js
- vue-cli 3.0新特性解讀Vue
- Vue3.0新特性 ---- 標籤 <Teleport>Vue
- Linux系統有什麼特性?與Windows對比有什麼不同?LinuxWindows
- 焦點關注:Visual C# 3.0 新特性概覽(轉)C#
- Java 14 可能帶來什麼新特性?Java
- Java SE 6 新特性: Java DB 和 JDBC 4.0JavaJDBC
- VB 9新特性——保留與捨去了什麼?
- CommMonitor Dump檢視有什麼功能特性?
- CommMonitor列表檢視有什麼功能特性?
- Solon 3.0 新特性:HttpUtils 瞭解一下HTTP
- [20150515]簡單瞭解某個版本有什麼新特性
- Linux具有哪些作用?Linux有什麼特性?Linux
- 企業使用免費CRM有什麼功能特性?
- CommMonitor終端檢視有什麼功能特性?
- CommMonitor Line 檢視有什麼功能特性?
- Git 2.1 有哪些新特性?Git
- Ruby 2.0 有哪些新特性?
- Hadoop 3.0 新特性原理及架構深度剖析Hadoop架構
- 最全的Vue3.0新特性預覽(翻譯)Vue
- Servlet3.0新特性-非同步處理Servlet、FilterServlet非同步Filter
- IBM Lotus Forms V3.0 中的新特性IBMORM
- JBUILDER 5 新特性 (轉)UI
- 什麼是熱繼電器,有什麼作用,如何用,電氣特性如何?
- Chrome 60 Beta 有哪些新特性?Chrome
- Chrome 61 Beta有哪些新特性?Chrome
- Let’s Hack非同步Servlet及Servlet3.0新特性非同步Servlet