DB2驱动类型

一般说明

IBM公司的数据库产品线中不同版本提供的数据访问API可以说是很多了,其中包括早期的基于CLI的驱动,最近的纯Java的驱动,以及CLI和 Java的组合.对于特定的DB2版本的驱动有特定的驱动也有通用的驱动,这是很明显的.但是诸多版本的数据库系统和诸多版本的访问驱动,放在客户面前,它们之间的关系显得有些纷繁.所以在使用IBM的数据库产品时,头脑中一定要注意版本对应和选择适当的通用驱动.还好,IBM已经开始走向统一了,也开始注意易用性了,这些努力从DB2 UDB V7就开始了.从那时开始,按照Java领域JDBC驱动的类型划分,IBM有了三类驱动了.

DB2的JDBC TYPE 2 驱动使 Java 应用程序通过JDBC调用DB2.对 DB2 JDBC type 2 driver 的调用被转换成 Java 本地方法.Java 使用这种驱动程序的应用程序必须运行在一个 DB2 客户机上,JDBC 请求通过这个客户机转到 DB2 服务器.在使用 DB2 JDBC 应用程序驱动程序访问 DB2 UDB for iSeries 数据源或者 DB2 for OS/390 或 z/OS 环境中的数据源之前,必须安装 DB2 Connect Version 8.DB2 JDBC type 2 driver 支持 JDBC 1.2 规范中描述的大部分 JDBC 和 SQLJ 函数,并且支持 JDBC 2.0 规范中描述的一些函数.

DB2的JDBC TYPE 3 驱动,也被称为applet 或net driver,它由一个JDBC 客户机和一个JDBC 服务器(该进程的名字是db2jd)组成.既可以在Applet中使用也可以在应用程序中使用.

DB2的JDBC TYPE 4 驱动被称为通用驱动,是纯Java实现的,该驱动也支持SQLJ.

目前IBM一直都没有提供 TYPE 1的JDBC驱动程序.

这些类型驱动程序所在的包是:db2jcc.jar 和 sqlj.zip 文件,sqllib/bin/db2jcct2.dll(该文件是 TYPE2所必需的).

使用

在使用 JDBC 连接 DB2 UDB V7.2 和 DB2 UDB V8.1 时,如果碰到一些令人费解的问题,可以检查一下开发环境使用的JDK,在IBM提供的已知JDK中切换(目前有1.3和1.4版本),往往就能解决你的问题。

DB2 UDB V8.2个人版本中,下面的测试代码测试了三种连接方式,并给出了结果:

import java.sql.*;

public class Employee {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Employee ee = new Employee();
  try {
   ee.testJcc();//成功
   ee.testNet();//成功
   ee.testApp();//失败,原因是:类型2需要安装DB2访问客户端,测试没有安装.如果要通过类型2访问远程数据库,可以把远程数据库编目到本地后即可.
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 /**
  * 测试驱动体系结构为类型4驱动:com.ibm.db2.jcc.DB2Driver, 该驱动位于包db2jcc.jar中.
  *
  * @throws InstantiationException
  * @throws IllegalAccessException
  * @throws ClassNotFoundException
  * @throws SQLException
  */
 public void testJcc() throws InstantiationException,
   IllegalAccessException, ClassNotFoundException, SQLException {
  Class.forName("com.ibm.db2.jcc.DB2Driver").newInstance();
  String url = "jdbc:db2://192.168.0.17:50000/SAMPLE";
  Connection con = DriverManager.getConnection(url, "db2admin", "cherub");
  con.setAutoCommit(false);
  Statement stmt = con.createStatement();
  ResultSet rs = stmt.executeQuery("select * from Employee");
  while (rs.next()) {
   System.out.println(rs.getString(1) + "," + rs.getString(2));
  }
 }

 /**
  * 测试驱动体系结构为类型3驱动:COM.ibm.db2.jdbc.net.DB2Driver, 该驱动位于包 db2java.zip中.
  *
  * @throws InstantiationException
  * @throws IllegalAccessException
  * @throws ClassNotFoundException
  * @throws SQLException
  */
 public void testNet() throws InstantiationException,
   IllegalAccessException, ClassNotFoundException, SQLException {
  Class.forName("COM.ibm.db2.jdbc.net.DB2Driver").newInstance();
  // 目标DB2系统侦听该服务于默认端口6789,否则还需要在 URL Pattern 中指定目标端口号
  String url = "jdbc:db2:192.168.0.17:SAMPLE";
  Connection con = DriverManager.getConnection(url, "db2admin", "cherub");
  con.setAutoCommit(false);
  Statement stmt = con.createStatement();
  ResultSet rs = stmt.executeQuery("select * from Employee");
  while (rs.next()) {
   System.out.println(rs.getString(1) + "," + rs.getString(2));
  }
 }

 /**
  * 测试驱动体系结构为类型2驱动:COM.ibm.db2.jdbc.app.DB2Driver, 该驱动也位于包 db2java.zip中.
  *
  * @throws InstantiationException
  * @throws IllegalAccessException
  * @throws ClassNotFoundException
  * @throws SQLException
  */
 public void testApp() throws InstantiationException,
   IllegalAccessException, ClassNotFoundException, SQLException {
  Class.forName("COM.ibm.db2.jdbc.app.DB2Driver").newInstance();
  String url = "jdbc:db2:sample";
  Connection con = DriverManager.getConnection(url, "db2admin", "cherub");
  con.setAutoCommit(false);

  Statement stmt = con.createStatement();
  ResultSet rs = stmt.executeQuery("select * from Employee");
  while (rs.next()) {
   System.out.println(rs.getString(1) + "," + rs.getString(2));
  }
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值