揭密JDBC驅(qū)動程序
對 Java 產(chǎn)生混淆的常見根源是:JDBC 有不同的版本,JDBC 驅(qū)動程序有不同的類型,它們可以被不同版本的 Java 使用。而且,新的 Java 規(guī)范總是在開發(fā)之中,因為通過 Java 社區(qū)過程(Java Community Process),相關(guān)的功能在不斷地擴展中。
JDBC 版本
DB2 通用數(shù)據(jù)庫 V8.1 支持 JDBC V2.1 規(guī)范和部分 JDBC 3.0 規(guī)范。使用通用 JDBC 驅(qū)動程序,全面支持 JDBC 3.0 需求的計劃正在進行之中。
JDBC 驅(qū)動程序被認(rèn)證為 J2EE 解決方案的一個組件。驅(qū)動程序認(rèn)證的結(jié)果總是發(fā)布在 Sun 兼容性網(wǎng)站上。
JDBC 驅(qū)動程序體系結(jié)構(gòu)
JDBC 驅(qū)動程序體系結(jié)構(gòu)分為四種類型。
◆Type 1
◆Type 2
◆Type 3
◆Type 4
JDBC Type 1 驅(qū)動程序
JDBC Type 1 驅(qū)動程序基于 JDBC-ODBC 橋。因此 ODBC 驅(qū)動程序可以與此類 JDBC 驅(qū)動程序(由 Sun 提供)結(jié)合起來使用。IBM 不支持 Type 1 驅(qū)動程序,因此它不是推薦的環(huán)境。圖 1 顯示了 JDBC Type 1 驅(qū)動程序的示例:
圖 1. JDBC Type 1 驅(qū)動程序
JDBC Type 2 驅(qū)動程序
JDBC Type 2 驅(qū)動程序依靠特定于操作系統(tǒng)的庫(共享庫)來與 RDBMS 通信。應(yīng)用程序?qū)⒀b入這種 JDBC 驅(qū)動程序,而驅(qū)動程序?qū)⑹褂霉蚕韼靵砼c DB2 服務(wù)器通信。DB2 UDB for Linux, UNIX® 和 Windows® V8.1 提供了兩種不同的 Type 2 驅(qū)動程序:
舊的/CLI JDBC 驅(qū)動程序在文件 db2java.zip 中提供。其實現(xiàn)包名稱為 COM.ibm.db2.jdbc.app.DB2Driver。該驅(qū)動程序目前已被用于進行 J2EE 認(rèn)證。其別名“app 驅(qū)動程序”源自于一種觀念及其包名稱,這種觀念就是:此驅(qū)動程序?qū)⑼ㄟ^遠(yuǎn)程數(shù)據(jù)庫的本地 DB2 UDB 客戶機執(zhí)行本地連接。
通用 JDBC 驅(qū)動程序在文件 db2jcc.jar 中提供。其實現(xiàn)包名稱為 com.ibm.db2.jcc.DB2Driver。 此驅(qū)動程序是 DB2 UDB for Linux, UNIX 和 Windows V8.1 中的新功能。在最初的實現(xiàn)(V8.1)中,此驅(qū)動程序用于使用 Type 4 驅(qū)動程序體系結(jié)構(gòu)與 DB2 服務(wù)器進行直接的 Java 連接。在 DB2 V8.1.2 中,您可以在 Type 2 體系結(jié)構(gòu)中使用此驅(qū)動程序。在 Type 2 體系結(jié)構(gòu)中使用此驅(qū)動程序的一個主要原因是為了本地應(yīng)用程序性能和分布式事務(wù)支持。通用 JDBC Type 2 驅(qū)動程序分別使用 com.ibm.db2.jcc.DB2XADataSource 和 com.ibm.db2.jcc.DB2ConnectionPoolDataSource 來支持分布式事務(wù)和連接池。
可以使用 JDBC Type 2 驅(qū)動程序來支持 JDBC 應(yīng)用程序。WebSphere Application Server 同時支持這兩種 Type 2 驅(qū)動程序。注:在將來的版本中不會對舊的/CLI Type 2 驅(qū)動程序進行增強。
圖 2 顯示了使用 JDBC Type 2 驅(qū)動程序的應(yīng)用程序的典型拓?fù)浣Y(jié)構(gòu):
圖 2. 使用JDBC Type 2 驅(qū)動程序的應(yīng)用程序
JDBC Type 3 驅(qū)動程序
JDBC Type 3 驅(qū)動程序是一種純 Java 實現(xiàn),它必須與 DB2 JDBC Applet 服務(wù)器(DB2 JDBC Applet Server)通信才能訪問 DB2 數(shù)據(jù)。此類驅(qū)動程序旨在使 Java applet 能訪問 DB2 數(shù)據(jù)源。在圖 3 所顯示的方案中,應(yīng)用程序與安裝有 DB2 客戶機另一臺機器進行通信。
圖 3. 使用Type 3 JDBC 驅(qū)動程序的典型應(yīng)用程序方案
JDBC Type 3 驅(qū)動程序常被稱作“網(wǎng)絡(luò)(net)驅(qū)動程序”,它是根據(jù)其包名 COM.ibm.db2.jdbc.net 命名的。DB2 V8.1 支持網(wǎng)絡(luò)驅(qū)動程序,可以將其用于 JDBC 應(yīng)用程序。
Type 3 驅(qū)動程序要求 db2java.zip 驅(qū)動程序總是處于與 DB2 Applet 服務(wù)器相同的維護級別。如果驅(qū)動程序在 applet 內(nèi)使用,這就不是一個問題,因為瀏覽器會在應(yīng)用程序執(zhí)行期間下載相應(yīng)的 db2java.zip 文件。許多客戶使用 Type 3 驅(qū)動程序而不是 Type 2 驅(qū)動程序,以避免必需的 DB2 客戶機安裝和必需的 DB2 CATALOG DATABASE 命令,后者用于創(chuàng)建使用舊的/CLI 驅(qū)動程序進行 Type 2 連接所必需的數(shù)據(jù)庫目錄信息。目前,WebSphere Application Server 和其它 J2EE 服務(wù)器不支持 IBM Type 3 驅(qū)動程序,因為該驅(qū)動程序不支持分布式事務(wù)(JTA)。將來的版本不會對 Type 3 驅(qū)動程序進行增強。
我們鼓勵使用通用 JDBC Type 4 驅(qū)動程序來替代 Type 3 驅(qū)動程序。
JDBC Type 4 驅(qū)動程序
Type 4 驅(qū)動程序是僅用于 Java 的 JDBC 驅(qū)動程序,它直接連接到數(shù)據(jù)庫服務(wù)器。DB2 UDB for Linux, UNIX 和 Windows V8.1 引入了稱為“通用 JDBC 驅(qū)動程序(Universal JDBC driver)”的 Type 4 驅(qū)動程序。通用 JDBC 驅(qū)動程序在文件 db2jcc.jar 中提供。其實現(xiàn)包名為 com.ibm.db2.jcc.DB2Driver。
請注意,通用 Type 2 和通用 Type 4 驅(qū)動程序具有相同的實現(xiàn)類名稱。有兩種方法可以區(qū)別 DB2 在內(nèi)部將實例化哪個驅(qū)動程序:
使用連接特性來確定連接是否使用共享庫(Type 2),或者驅(qū)動程序是否會啟動來自 Java 應(yīng)用程序的直接連接(Type 4)。
使用不同的連接 URL 模式來指示您想要 Type 2 和 Type 4 行為中的哪一種。
Type 4 URL 模式的示例:字符串“jdbc:db2://server1:50000/sample”要求 JDBC 驅(qū)動程序?qū)?Java 應(yīng)用程序直接連接到 DB2 服務(wù)器上名為“sample”的數(shù)據(jù)庫,該數(shù)據(jù)庫位于配置在 DB2 服務(wù)器(主機名為 server1)上的 DB2 實例中,而 DB2 服務(wù)器則在端口 50000 上進行偵聽。
Type 2 URL 模式的示例:字符串“jdbc:db2:sample”。有關(guān) DB2 服務(wù)器(“server1”)和端口(“50000”)的信息可以在 DB2 客戶機編目目錄中找到。
通 用 JDBC 驅(qū)動程序是一種與驅(qū)動程序類型連通性或目標(biāo)平臺無關(guān)的抽象 JDBC 處理器。通用 JDBC 驅(qū)動器是一種與體系結(jié)構(gòu)無關(guān)的 JDBC 驅(qū)動程序,用于進行分布式和本地 DB2 UDB 訪問。因為通用 JDBC 驅(qū)動程序獨立于任何特定 JDBC 驅(qū)動程序類型連通性或目標(biāo)平臺,所以它在一個 DB2 UDB 驅(qū)動程序?qū)嵗型瑫r支持所有 Java 連通性(Type 4 驅(qū)動程序)和基于 JNI 的連通性(Type 2 驅(qū)動程序)。該驅(qū)動程序可以用于獨立 Java 應(yīng)用程序或多層應(yīng)用程序。
重要:就 DB2 UDB V8.1.2 而言,通用 JDBC 驅(qū)動程序要求 CLASSPATH 中有許可證 JAR 文件和 db2jcc.jar 文件。以下是所需的許可證 JAR 文件:
◆對于 Cloudscape™ Network Server V5.1:db2jcc_license_c.jar
◆對于 DB2 UDB V8 for Linux, UNIX 和 Windows 服務(wù)器:db2jcc_license_su.jar
◆對于 DB2 UDB for iSeries® and z/OS 服務(wù)器(與 DB2 Connect 和 DB2 Enterprise Server Edition 一起提供):db2jcc_license_cisuz.jar
通用驅(qū)動程序可以通過使用預(yù)先安裝在目標(biāo)服務(wù)器上的必備存儲過程,來查詢數(shù)據(jù)庫元數(shù)據(jù)目錄及檢索服務(wù)器錯誤消息文本:
◆對于 Linux、UNIX 和 Windows 上的 UDB V8,這些存儲過程是預(yù)先安裝的。
◆對于 DB2 UDB for OS/390® V6,必須安裝 PTF UQ72081 和 UQ72082。
◆對于 DB2 UDB for OS/390 and z/OS V7,必須安裝 PTF UQ72083。即將推出的 z/OS 上的 DB2 UDB V8 將會預(yù)先安裝必需的存儲過程。
◆DB2 UDB for iSeries V5R1 需要 PTF SI06308、SI06300、SI06301、SI06302、SI06305、SI06307 和 SI05872。
◆DB2 UDB for iSeries V5R2 需要 PTF SI06541、SI06796、SI07557、SI07564、SI07565、SI07566 和 SI07567。DB2 UDB for iSeries V5R3 將會預(yù)先安裝必需的存儲過程。
圖 4 中顯示了 Type 4 JDBC 驅(qū)動程序?qū)崿F(xiàn)。注:從 Linux、UNIX 和 Windows 上的 Java 應(yīng)用程序或 applet 連接到 DB2 for z/OS and OS/390 所用的通用 JDBC/SQLJ 驅(qū)動程序(Type 4 和 Type 2)需要適當(dāng)?shù)脑S可證文件(db2jcc_license_cisuz.jar)。該許可證文件是隨 DB2 Connect 產(chǎn)品一起提供的。
【編輯推薦】