//驅(qū)動(dòng)的問題
Class.forName("com.ibm.db2.jcc.DB2Driver").newInstance();
Connection con = DriverManager.getConnection("jdbc:db2://133.64.37.1:50000/CHURNDB", "test", "test");
DB2有幾種jdbc驅(qū)動(dòng),jdbc-url分別如下:
jdbc:db2:localhost:db2test COM.ibm.db2.jdbc.net.DB2Driver type3 db2java.zip
jdbc:db2:db2test COM.ibm.db2.jdbc.app.DB2Driver type2 db2java.zip
jdbc:db2://localhost:50000/db2test com.ibm.db2.jcc.DB2Driver type4 db2jcc.jar
另外用type4時(shí) 數(shù)據(jù)庫必須將codeset設(shè)置成utf-8
否則查詢時(shí)會(huì)拋出com.ibm.db2.jcc.b.DisconnectException: encoding not supported!!異常
今天犯了錯(cuò)誤,弄混了寫法,希望沒人再犯同樣的錯(cuò)。
我的版本是 udb8.1。
----------------------------------------------------------------------
/**了解基礎(chǔ)情況**/
對(duì)于Java程序員而言,DB2 提供了兩種應(yīng)用程序編程接口(API):JDBC 和 SQLJ。
JDBC:
JDBC 驅(qū)動(dòng)程序分為舊的/CLI 驅(qū)動(dòng)程序<db2java.zip>和新的通用 JDBC 驅(qū)動(dòng)程序(Universal JDBC Driver)<db2jcc.jar>。
JDBC 是一個(gè)與供應(yīng)商無關(guān)的動(dòng)態(tài) SQL 接口,該接口通過標(biāo)準(zhǔn)化的 Java 方法向您的應(yīng)用程序提供數(shù)據(jù)訪問。
JDBC 類似于 DB2 CLI,因?yàn)槟鸁o須預(yù)編譯應(yīng)用程序代碼,也無須將軟件包綁定到 DB2 數(shù)據(jù)庫。
作為一個(gè)與供應(yīng)商無關(guān)的標(biāo)準(zhǔn),JDBC 應(yīng)用程序提供了更多的可移植性—這是當(dāng)今異構(gòu)業(yè)務(wù)基礎(chǔ)設(shè)施所必需的優(yōu)點(diǎn)。
在執(zhí)行 JDBC 應(yīng)用程序期間,驅(qū)動(dòng)程序?qū)⑨槍?duì)當(dāng)前連接的 DB2 數(shù)據(jù)庫服務(wù)器驗(yàn)證 SQL 語句。
訪問期間的任何問題都會(huì)作為 Java 異常與相應(yīng)的 SQLSTATE 和 SQLCODE 一起報(bào)告給應(yīng)用程序。
SQLJ:
SQLJ 是一個(gè)用于從 Java 應(yīng)用程序進(jìn)行數(shù)據(jù)訪問的標(biāo)準(zhǔn)開發(fā)模型。
SQLJ API 是在 SQL 1999 規(guī)范中定義的。
新的通用 JDBC 驅(qū)動(dòng)程序在一個(gè)實(shí)現(xiàn)中同時(shí)為 JDBC 和 SQLJ API 提供了支持。
JDBC 和 SQLJ 可以在同一個(gè)應(yīng)用程序中互操作。
SQLJ 提供了獨(dú)特的使用靜態(tài) SQL 語句進(jìn)行開發(fā)以及在 DB2 包級(jí)別控制訪問的能力。
/**JDBC連接方式分析**/
JDBC 驅(qū)動(dòng)程序體系結(jié)構(gòu)分為四種類型:Type1,Type2,Type3,Type4。
Type1:
驅(qū)動(dòng)程序基于 JDBC-ODBC 橋。
因此 ODBC 驅(qū)動(dòng)程序可以與此類 JDBC 驅(qū)動(dòng)程序(由 Sun 提供)結(jié)合起來使用。
IBM 不支持 Type 1 驅(qū)動(dòng)程序,因此它不是推薦的環(huán)境。
Type2:
驅(qū)動(dòng)程序依靠特定于操作系統(tǒng)的庫(共享庫)來與 RDBMS 通信。
應(yīng)用程序?qū)⒀b入這種 JDBC 驅(qū)動(dòng)程序,而驅(qū)動(dòng)程序?qū)⑹褂霉蚕韼靵砼c DB2 服務(wù)器通信。
DB2 UDB for Linux, UNIX和 WindowsV8.1 提供了兩種不同的 Type 2 驅(qū)動(dòng)程序:
<1> 舊的/CLI JDBC 驅(qū)動(dòng)程序在文件db2java.zip中提供。
其實(shí)現(xiàn)包名稱為COM.ibm.db2.jdbc.app.DB2Driver。
該驅(qū)動(dòng)程序目前已被用于進(jìn)行 J2EE 認(rèn)證。
其別名“app 驅(qū)動(dòng)程序”源自于一種觀念及其包名稱,
這種觀念就是:此驅(qū)動(dòng)程序?qū)⑼ㄟ^遠(yuǎn)程數(shù)據(jù)庫的本地 DB2 UDB 客戶機(jī)執(zhí)行本地連接。
<2> 通用 JDBC 驅(qū)動(dòng)程序在文件db2jcc.jar中提供。
其實(shí)現(xiàn)包名稱為com.ibm.db2.jcc.DB2Driver。
此驅(qū)動(dòng)程序是 DB2 UDB for Linux, UNIX 和 Windows V8.1 中的新功能。
在最初的實(shí)現(xiàn)(V8.1)中,此驅(qū)動(dòng)程序用于使用 Type 4 驅(qū)動(dòng)程序體系結(jié)構(gòu)與 DB2 服務(wù)器進(jìn)行直接的 Java 連接。
在 DB2 V8.1.2 中,您可以在 Type 2 體系結(jié)構(gòu)中使用此驅(qū)動(dòng)程序。
在 Type 2 體系結(jié)構(gòu)中使用此驅(qū)動(dòng)程序的一個(gè)主要原因是為了本地應(yīng)用程序性能和分布式事務(wù)支持。
通用 JDBC Type 2 驅(qū)動(dòng)程序分別使用com.ibm.db2.jcc.DB2XADataSource和com.ibm.db2.jcc.DB2ConnectionPoolDataSource來支持分布式事務(wù)和連接池。
注:在將來的版本中不會(huì)對(duì)舊的/CLI Type 2 驅(qū)動(dòng)程序進(jìn)行增強(qiáng)。
Type3:
驅(qū)動(dòng)程序是一種純 Java 實(shí)現(xiàn),它必須與 DB2 JDBC Applet 服務(wù)器(DB2 JDBC Applet Server)通信才能訪問 DB2 數(shù)據(jù)。
此類驅(qū)動(dòng)程序旨在使 Java applet 能訪問 DB2 數(shù)據(jù)源。
常被稱作“網(wǎng)絡(luò)(net)驅(qū)動(dòng)程序”,它是根據(jù)其包名COM.ibm.db2.jdbc.net命名的。DB2 V8.1 支持網(wǎng)絡(luò)驅(qū)動(dòng)程序,可以將其用于 JDBC 應(yīng)用程序。
要求db2java.zip驅(qū)動(dòng)程序總是處于與 DB2 Applet 服務(wù)器相同的維護(hù)級(jí)別。
如果驅(qū)動(dòng)程序在 applet 內(nèi)使用,這就不是一個(gè)問題,因?yàn)闉g覽器會(huì)在應(yīng)用程序執(zhí)行期間下載相應(yīng)的db2java.zip文件。
許多客戶使用 Type3 驅(qū)動(dòng)程序而不是 Type2 驅(qū)動(dòng)程序,以避免必需的 DB2 客戶機(jī)安裝和必需的DB2 CATALOG DATABASE命令,后者用于創(chuàng)建使用舊的/CLI 驅(qū)動(dòng)程序進(jìn)行 Type 2 連接所必需的數(shù)據(jù)庫目錄信息。
目前,WebSphere Application Server 和其它 J2EE 服務(wù)器不支持 IBM Type 3 驅(qū)動(dòng)程序,因?yàn)樵擈?qū)動(dòng)程序不支持分布式事務(wù)(JTA)。
將來的版本不會(huì)對(duì) Type 3 驅(qū)動(dòng)程序進(jìn)行增強(qiáng)。
鼓勵(lì)使用通用 JDBC Type 4 驅(qū)動(dòng)程序來替代 Type 3 驅(qū)動(dòng)程序。
Type4:
驅(qū)動(dòng)程序是僅用于 Java 的 JDBC 驅(qū)動(dòng)程序,它直接連接到數(shù)據(jù)庫服務(wù)器。
DB2 UDB for Linux, UNIX 和 Windows V8.1 引入了稱為“通用 JDBC 驅(qū)動(dòng)程序(Universal JDBC driver)”的 Type 4 驅(qū)動(dòng)程序。
通用 JDBC 驅(qū)動(dòng)程序在文件db2jcc.jar中提供。
其實(shí)現(xiàn)包名為com.ibm.db2.jcc.DB2Driver。
請(qǐng)注意,通用 Type 2 和通用 Type 4 驅(qū)動(dòng)程序具有相同的實(shí)現(xiàn)類名稱。
有兩種方法可以區(qū)別 DB2 在內(nèi)部將實(shí)例化哪個(gè)驅(qū)動(dòng)程序:
使用連接特性來確定連接是否使用共享庫(Type2),或者驅(qū)動(dòng)程序是否會(huì)啟動(dòng)來自 Java 應(yīng)用程序的直接連接(Type4)。
重要:就 DB2 UDB V8.1.2 而言,通用 JDBC 驅(qū)動(dòng)程序要求 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ū)動(dòng)程序類型:db2java.zip, db2jcc.jar
注意:假如你使用db2java.zip,且web服務(wù)器使用Tomcat的話,請(qǐng)將db2java.zip改名為db2java.jar,最好將zip解壓再用jar命令打包,直接改文件類型也行(呵呵,按照jar文件嚴(yán)格意義上來講這是不符合文法的<少了描述性文件:MANIFEST.MF>,能用就行)
還有一般情況下:就是使用 db2java.zip的話需要安裝db2客戶端, 使用db2jcc.jar是通過網(wǎng)絡(luò)直接來連接的無需安裝db2客戶端(假如用在type2上還是要裝客戶端的)
type2:
使用<db2java.zip>:
jdbc.driverClassName=COM.ibm.db2.jdbc.app.DB2Driver
jdbc.url=jdbc:db2:dataBaseName
假如你的工具使用的是myeclipse且使用的是tomcat plugin的話,請(qǐng)將db2jdbc.dll 拷貝到 %JAVA_HOME%/bin下,否則不行地啦
<是不是其他類型的使用db2java.zip驅(qū)動(dòng)也有這個(gè)問題呢,不知道,沒試過,有空試一下>
使用<db2jcc.jar>:
jdbc.driverClassName=com.ibm.db2.jcc.DB2Driver
jdbc.url=jdbc:db2:dataBaseName
type3:
驅(qū)動(dòng):db2java.zip
jdbc.driverClassName=COM.ibm.db2.jdbc.net.DB2Driver
jdbc.url=jdbc:db2://ip:6789/DBNAME
注意:要在數(shù)據(jù)庫上執(zhí)行 db2jstrt 6789 (這句啟動(dòng)了db2jd進(jìn)程,6789是默認(rèn)的服務(wù)器偵聽jdbc2連接的端口,也可以設(shè)置成另外的任意不沖突的端口。)
type4:
驅(qū)動(dòng):db2jcc.jar
數(shù)據(jù)庫字符集必須設(shè)置為utf-8
jdbc.driverClassName=com.ibm.db2.jcc.DB2Driver
jdbc.url=jdbc:db2://ip:port/DBNAME