依照 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 的驱动程式。
安装DB2后,在目录IBM/SQLLIB/java中包含了相应的驱动程序。可以分为两类:db2java.zip和db2jcc.jar。
db2jcc.jar文件中包含一个com.ibm.db2.jcc.DB2Driver驱动程序。db2java.zip包含一个COM.ibm.db2.jdbc.app.DB2Driver、COM.ibm.db2.jdbc.app.DB2StoredProcDriver驱动程序。
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: 需要访问的数据库名
有人说在db2java.zip中包含一个COM.ibm.db2.jdbc.net.DB2Driver 驱动程序。在DB2 V9.5中并没有发现。使用也会报错。
除了 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 上进行侦听。
在MyEclipse Database Explorer中配置时使用Type 2 Driver URL Pattern:jdbc:db2:databasename 可以连接到数据库,也可以做Hibernate Revenge。但是在SSH的配置文件中(如下),可能会出错。
出错信息:
11:04:25,906 INFO [STDOUT] com.ibm.db2.jcc.b.SqlException: [jcc][10389][12245][3.50.152] 装入本机库 db2jcct2, java.lang.UnsatisfiedLinkError: no db2jcct2 in java.library.path 时产生故障: ERRORCODE=-4472, SQLSTATE=null
将数据库连接改为:jdbc:db2://localhost:50000/test即可。
大功告成。