jdbc鏈接db2的問題!轉

轉自 http://rainbow686.iteye.com/blog/63100

昨天在用java鏈接db2的數據庫時發現以前沒有注意的一些問題,之前鏈接db2的jdbc通常是:

JDBC Driver:COM.ibm.db2.jdbc.net.DB2Driver

JDBC URL:jdbc:db2://127.0.0.1:6789/sample

組合後也就是:

Class.forName( ” com.ibm.db2.jdbc.net.DB2Driver ” );
String url = ” jdbc:db2://192.9.200.108:6789/SAMPLE “
Connection conn = DriverManager.getConnection( url, sUsr, sPwd );

 

這是我們通常意義上所說的type3純java驅動,這類驅動程序使用純 JAVA 客戶機,並使用獨立於數據庫的協議與中間件服務器通信,然後中間件服務器將客戶機請求傳給數據源。這個中間件服務器就是安裝DB2後在服務中顯示爲”DB2 JDBC小應用程序服務器–對DB2應用程序提供JDBC服務支持”(當然我是在windwos上安裝DB2的),務必使這個服務啓動,否則type3型的JDBC是鏈接不上的。

此外用的比較多的是type4型的純java驅動

JDBC Driver:com.ibm.db2.jcc.DB2Driver

JDBC URL:jdbc:db2://127.0.0.1:50000/sample

 

下面是一段IBM網站的引用:

 

依照 JDBC 規範,有四種類型的 JDBC 驅動程序體系結構:

Type 1:這類驅動程序將 JDBC API 作爲到另一個數據訪問 API 的映射來實現,如開放式數據庫連通性(Open Database Connectivity,ODBC)。這類驅動程序通常依賴本機庫,這限制了其可移植性。JDBC-ODBC 橋驅動程序就是 Type 1 驅動程序的最常見的例子。
Type 2:這類驅動程序部分用 JAVA 編程語言編寫,部分用本機代碼編寫。這些驅動程序使用特定於所連接數據源的本機客戶端庫。同樣,由於使用本機代碼,所以其可移植性受到限制。
Type 3:這類驅動程序使用純 JAVA 客戶機,並使用獨立於數據庫的協議與中間件服務器通信,然後中間件服務器將客戶機請求傳給數據源。
Type 4:這類驅動程序是純 JAVA,實現針對特定數據源的網絡協議。客戶機直接連接至數據源。
對於DB2 UDB V7.2來說,它不支持 Type 1 和 Type 4 的驅動程序,但是提供了分別支持 Type 2 和 Type 3 的驅動程序。

示例如下:

兩種驅動程序均隨產品安裝由 db2java.zip 提供。

COM.ibm.db2.jdbc.app.DB2Driver
這是一種 Type 2 的 JDBC 驅動程序,它通過 DB2 本地客戶機庫的幫助建立和 DB2本地數據庫或是遠程數據庫的連接(事先將遠程數據庫編目到本地)。因此,我們必須在應用系統所在的機器上同時部署 DB2 本地客戶機庫,這也許是它最大的一個不足之處。

使用格式如下:

Driver Name:COM.ibm.db2.jdbc.app.DB2Driver

URL Pattern:jdbc:db2:databasename

databasename: 需要訪問的數據庫名

COM.ibm.db2.jdbc.net.DB2Driver
這是一種 Type 3 的 JDBC 驅動程序,它通過與一臺已經部署了 DB2 本地客戶機庫的機器通信來建立和 DB2 遠程數據庫的連接。

使用格式如下:

Driver Name:COM.ibm.db2.jdbc.net.DB2Driver

URL Pattern:jdbc:db2:ServerIP:databasename

ServerIP: 需要訪問的數據庫所在機器IP地址

databasename: 需要訪問的數據庫名

(目標DB2系統偵聽該服務於默認端口6789,否則還需要在 URL Pattern 中指定目標端口號)

對於 DB2 UDB V8.1 來說,它仍然不支持 Type 1 的驅動程序。同時,它在 DB2 UDB V8.1的基礎上,新增加了對 Type 4 驅動程序的支持。

示例如下:

DB2 UDB V8.1 仍然支持上面所述 V7.2 支持的兩種驅動程序,隨產品安裝由 db2java.zip 提供,但具體實現上和 DB2 UDB V7.2 產品發佈的包有所不同,所以可能存在下文所要進行實驗驗證的兼容性問題。

除了 COM.ibm.db2.jdbc.app.DB2Driver 之外,DB2 UDB V8.1 還提供了另外一種 Type 2 的驅動程序,隨產品安裝由 db2jcc.jar 提供。其實現包名是 com.ibm.db2.jcc.DB2Driver,在DB2 UDB V8.1 最初的實現中,此驅動程序只用於使用 Type 4 驅動程序體系結構與 DB2 服務器進行直接的 JAVA 連接,這類驅動程序由於不需要另外部署 DB2 本地客戶機庫以及性能相對較好而收到開發人員的歡迎。自從 DB2 UDB V8.1.2(安裝了 FixPack 2)之後,開發人員還可以在 Type 2 體系結構中使用該驅動程序,以提高本地應用程序的性能。

這裏,兩種驅動程序具有相同的實現類名稱,有兩種不同的方法可以區分 DB2 系統在內部最終會實例化哪個驅動程序:

使用不同的 URL Pattern 來區分兩種不同的驅動程序
Type 2 Driver URL Pattern:jdbc:db2:databasename

這當中 databasename 是需要訪問的數據庫名

Type 4 Driver URL Pattern:jdbc:db2://ServerIP:50000/databasename

這當中 ServerIP 是需要訪問的數據庫所在機器IP地址,databasename 是需要訪問的數據庫名,DB2 服務器會在默認端口 50000 上進行偵聽。

使用連接特性來區分數據庫連接是否會使用 DB2 本地客戶機庫,或者是使用JAVA 直接連接。
DB2 UDB V8.1 新增加支持的這種 Type 4 驅動程序,常被稱爲”通用 JDBC 驅動程序”,是一種與驅動程序類型連通性或目標平臺無關的抽象 JDBC 處理器,因此常用於進行分佈式和本地 DB2 UDB 訪問。因爲”通用 JDBC 驅動程序”獨立於任何特定 JDBC 驅動程序類型連通性或目標平臺,所以它在一個 DB2 UDB 驅動程序實例中同時支持所有 JAVA 連通性(Type 4 驅動程序)和基於 JNI 的連通性(Type 2 驅動程序)。該驅動程序可以用於獨立 JAVA 應用程序或多層應用程序,是開發人員一個不錯的選擇。

 

關於DB2 JDBC驅動的jar包:

db2java.zip包含兩個驅動類COM.ibm.db2.jdbc.app.DB2Driver.class(第二類驅動,現在不推薦使用),另一個COM.ibm.db2.jdbc.net.DB2Driver.class(第三類驅動,也叫applet驅動,網絡驅動)
db2jcc.jar是IBM推薦使用的,其包含一個新的第二類驅動和一個第四類驅動,二者通過uril來區分

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章