其它章節的翻譯參見:
http://www.pgsqldb.org/twiki/bin/view/PgSQL/JDBC4%E8%AF%B4%E6%98%8E%E4%B9%A6
=================================================================
序言
這個文檔鞏固了下面幾個規范的內容:
“JDBC: Java的SQL類庫”
“JDBC 2.1 類庫”
“JDBC 2.0 標準擴展類庫”
“JDBC 3.0 規范”
文檔介紹了JDBC 4.0 類庫的新特征和一些增強的特征。文檔根據不同特征劃分章節,這樣可以更方便了解JDBC 4.0和3.0的不同之處。
讀者如果想了解JDBC類庫的詳細信息,可以參考JDBC的類庫文檔(Javadoc),該文檔可以由以下鏈接獲得:
http://java.sun.com/products/jdbc
==========================================================================
介紹
1.1 JDBC類庫
JDBC類庫提供了通過Java語言訪問關系數據庫的能力。Java程序通過JDBC可以執行SQL語句,對獲取的數據進行處理,并將變化了的數據存回數據庫。在分布式異構環境中,我們還可以通過JDBC操縱多個數據源。
JDBC類庫基于X/Open SQL通用語言接口(CLI),ODBC也基于此。JDBC提供了一個使用方便的映射方案:從Java語言到X/Open 通用語言接口和SQL標準的抽象實體及概念的映射。
自1997年的產生至今,JDBC類庫已被廣泛的接受和實現。類庫的靈活性使得它可以有很多個具體實現。
1.2 平臺
JDBC類庫是Java平臺的一部分。4.0版分為兩個包:java.sql 和 javax.sql。這兩個包都包含在JSE(Java桌面版)和JEE(Java企業版)中。
1.3 適合讀者
該文檔主要面向下列產品的開發者:
1. JDBC驅動程序
2. 基于數據庫驅動提供三層架構服務的應用服務器
3. 使用JDBC類庫來提供服務的工具
該文檔想達到以下目的:
1.對使用JDBC類庫的開發者的一個介紹
2.作為開發基于JDBC的類庫的起始點
===============================================================
目標
2.1 歷史
2.2 JDBC 4.0 之目標
---1.與JEE和JSE平臺相處融洽
---2.與SQL:2003一致
---3.鞏固前述四個規范
---4.提供中立于廠商的通用功能
---5.主要只針對SQL類型的數據源
---6.提供高層類庫和工具的基礎設施
---7.保持簡單
---8.加強可靠性、可用性和可伸縮性
---9.保持向后兼容性
---10.與JDBC行集(RowSet)緊密聯系
---11.與連接器架構(Connectors)兼容
---12.清晰描述JDBC需求
==================================================================
新特性概覽
3.1 變更概覽
JDBC 4.0 類庫在以下領域注入了變化和新的元素:
1.自動加載java.sql.Driver
DriverManager.getConnection方法被修改以利用JSE的服務提供者機制來自動加載JDBC驅動。這樣就不需要調用Class.forName方法了。
2.類庫使用更容易
添加了標準JDBC注釋。支持數據集(DataSet),使Java應用調用SQL數據源更加方便。
3.ROWID數據類型
添加了java.sql.RowID數據類型,使得JDBC程序可以訪問SQL ROWID。
4.支持本地字符集轉換(National Character Set Conversion)
添加了一些JDBC類型:NCHAR, NVARCHAR, LONGVARCHAR, NCLOB。對應的方法setNString, setNCharacterStream, setNClob也被添加到PreparedStatement接口中。
5.增強了對BLOB和CLOB的支持
Connection接口添加了生產BLOB,CLOB和NCLOB對象的方法。PreparedStatement接口添加了通過InputStream插入BLOB的方法和使用Reader插入CLOB,NCLOB的方法。Blob, Clob和NClob現在可以通過free方法釋放資源。
6.SQL/XML和XML支持
SQL2003引入了用SQL表達XML數據的概念。一些類庫被添加進來以支持應用對這些數據的訪問。
7.包裝器(Wrapper)模式
添加了解包JDBC實現的能力,使開發者可以利用在廠商實現中提供的非標準JDBC方法。
8.加強的SQLException
添加對JSE鏈式異常的支持。SQLException現在支持Iterable接口,所以我們可以在for-each循環里讀取SQLExceptions。新添加了兩類SQL異常:SQLTransientException和SQLNonTransientException。每個類都提供映射到普通SQLState類型值(譯者注:SQLState?)的子類。
9.連接管理
Connection和Statement接口得到了增強,以利于對連接狀態的跟蹤,并增加在池環境中管理Statement對象的靈活性。
10.JDBC類庫的變化
下面的JDBC接口被修改:
---10.1 Connection
添加了下列方法:createBlob, createClob, createNClob, createQueryObject, isValid, createXML, getClientInfo, setClientInfo。
---10.2 CallableStatement
添加了下列方法:getRowId, setRowId, getNClob, setNString, setNCharacterStream, setNClob, getSQLXML, setSQLXML。重載了setClob和setBlob方法。
---10.3 DatabaseMetaData
添加了下列方法:getRowIdLifetime, autoCommitFailureClosesAllResultSets, providesQueryObjectGenerator, getClientInfoProperties, supportsStoredFunctionsUsingCallSyntax. 重載了getSchemas方法。
---10.4 PreparedStatement
添加了下列方法:setRowId, setNString, setNCharacterStream, setSQLXML, isPoolable, setPoolable, setNClob。重載了setClob和setBlob方法。
---10.5 ResultSet
添加了下列方法:getHoldability, getRowId, updateRowID, getNClob, isClosed, updateNString, getSQLXML, updateSQLXML, updateNClob。
---10.6 Statement
添加了isClosed和getResultSetHoldability方法。
---10.7 DataSource
添加了createQueryObject方法。
---10.8 PooledConnection
添加了addStatementEventListener和removeStatementEventListener方法。
====================================================================
概覽
JDBC類庫使得Java程序可以訪問多個數據源,但在大多數情況下,這個數據源是關系數據庫,并且通過SQL訪問。然而,實現JDBC技術的驅動也可以基于其它的數據源,包括遺留文件系統和面向對象的系統。
JDBC類庫的主要目的就是提供應用程序訪問多種數據源的標準接口。
這一章介紹JDBC類庫的一些關鍵概念,并描述JDBC應用的兩個通用環境及其中的功能實現。
4.1 創建連接
JDBC類庫中的Connection接口代表了底層數據源的一個連接。
在典型場景中,JDBC應用程序使用兩種機制連接到數據源:
1.DriverManager --- 這個類在JDBC 1.0中引入,它使用硬編碼的URL來加載驅動。
2.DataSource --- 這個接口在JDBC 2.0可選包中引入。它優于DriverManager方式,因為它隱藏了數據源的詳細信息。我們通過設置DataSource的屬性來標明它代表的數據源。當getConnection方法被調用時,DataSource對象會返回一個對應的連接。我們可以通過改變DataSource的屬性來使它指向另一個數據源,而不是改變程序代碼。而且,如果DataSource的實現改變了,使用它的應用程序代碼不需要改變。
JDBC類庫也定義了兩個DataSource的擴展,用來支持企業級應用,如下:
1.ConnectionPoolDataSource --- 支持物理連接的緩存和重用,這樣可以提高應用的性能和可伸縮性。
2.XADataSource --- 提供可以使用在分布式事務中的連接。