DB2 UDB for Linux, UNIX 和 Windows 中的 Java 开发概述:V8.1 更新版
Paul Zikopoulos 和 Grant Hutchison ©2003 International Business Machines Corporation. All rights reserved. |
注:本文是对文章 DB2 和 Java 数据库连接(JDBC)概述所做的 V8.1 更新。
简介
关系数据库在大多数需要持久数据存储的应用程序中扮演着重要角色,但它们却不是开发和选择各种编程模型、框架和体系结构背后的驱动力。应用程序开发的优先级通常由关系数据库管理系统(RDBMS)以外的因素决定,譬如对于特定任务,是选择 J2EE 还是 .NET 作为编程模型。
认识到您可能会青睐某种编程体系结构而别人可能会热衷于另外一种体系结构这一事实,DB2® Universal Database™ 采取的策略是提供包含您所做的任何选择的最佳集成。
本文专门讨论了 DB2 UDB 环境中的 JDBC 和 SQLJ 支持这一特殊主题。
DB2 UDB 应用程序开发方法
虽然这可能有点儿过于简单,但目前的应用程序开发却主要包含以下几种不同的编程类型:
- 使用 Java 基于 J2EE 编程模型开发应用程序。
- 基于目前的 Microsoft® API 集(ADO 和 ADO.net)开发 Windows®、Web、WinForm 和基于 .Net 的应用程序。
- 使用 C/C++ 编程语言和 ODBC/CLI 接口开发应用程序。
- 使用 Borland Delphi/Kylix 框架开发应用程序。
- 使用侧重于 Linux 的开放源码框架(Perl、Python 和 PHP 等等)开发应用程序。
- 使用 Web 服务开发跨平台的业务逻辑。
DB2 UDB 的优点在于它支持上面的所有开发模型!
对于 Java™ 程序员而言,DB2 提供了两种应用程序编程接口(API):JDBC 和 SQLJ。正如 Java 2 标准版(Java 2, Standard Edition,J2SE)规范中所定义的那样,JDBC 是 Java 编程语言的必备组件。按照标准中所定义的,要编写能够访问 DB2 的 JDBC 应用程序,各种 Java 类和接口的实现是必需的。这种实现也称为 JDBC 驱动程序。DB2 UDB for Linux, UNIX® 和 Windows 为此目的提供了一整套 JDBC 驱动程序。JDBC 驱动程序分为旧的/CLI 驱动程序和新的通用 JDBC 驱动程序(Universal JDBC Driver)。
DB2 UDB 的 Java 支持包括对 JDBC 的支持,JDBC 是一个与供应商无关的动态 SQL 接口,该接口通过标准化的 Java 方法向您的应用程序提供数据访问。JDBC 类似于 DB2 CLI,因为您无须预编译应用程序代码,也无须将软件包绑定到 DB2 数据库。作为一个与供应商无关的标准,JDBC 应用程序提供了更多的可移植性 — 这是当今异构业务基础设施所必需的优点。在执行 JDBC 应用程序期间,驱动程序将针对当前连接的 DB2 数据库服务器验证 SQL 语句。访问期间的任何问题都会作为 Java 异常与相应的 SQLSTATE 和 SQLCODE 一起报告给应用程序。
SQLJ 是一个用于从 Java 应用程序进行数据访问的标准开发模型。SQLJ API 是在 SQL 1999 规范中定义的。新的通用 JDBC 驱动程序在一个实现中同时为 JDBC 和 SQLJ API 提供了支持。JDBC 和 SQLJ 可以在同一个应用程序中互操作。SQLJ 提供了独特的使用静态 SQL 语句进行开发以及在 DB2 包级别控制访问的能力。
DB2 的 Java 访问方法
DB2 对 Java 编程环境提供了丰富的支持。可以使用下列方法之一将 Java 类放入模块从而访问 DB2 数据:
- DB2 服务器
- 存储过程(JDBC 或 SQLJ)
- SQL 函数或用户定义的函数(JDBC 或 SQLJ)
- 浏览器
- 基于 JDBC 的 applet(JDBC)
- J2EE 应用程序服务器(如 WebSphere® Application Server)
- Java ServerPages(JSP)(JDBC)
- Servlet(SQLJ 或 JDBC)
- Enterprise JavaBeans(EJB)(SQLJ 或 JDBC)
您可能会问“我该怎么开始?”。
首先,安装 DB2 UDB 应用程序开发客户机(DB2 UDB Application Development client),并将其连接到 UNIX、Linux 、Windows、z/OS™ 或 OS/400® 上的 DB2 UDB 数据库。如果您打算访问 DB2 UDB for z/OS 或 DB2 UDB for OS/400,那么请使用适合您开发环境的 DB2 Connect™ 产品。DB2 UDB 应用程序开发客户机包含开发 C、COBOL 和 Java 应用程序所需的所有驱动程序。
如果您打算使用 J2EE 应用程序服务器(如 WebSphere Application Server)来开发多层应用程序,那么每个应用程序服务器都需要 DB2 UDB 运行时客户机和 DB2 UDB 应用程序开发客户机。
在开发和测试了应用程序之后,下一步就是确定部署拓扑结构。在规范中定义了各种 JDBC 驱动程序体系结构类型。让我们来研究一下可用的各种类型的驱动程序、Java 开发工具箱(JDK)版本和 Java 运行时环境(JRE)。
JDBC 驱动程序揭密
对 Java 产生混淆的常见根源是:JDBC 有不同的版本,JDBC 驱动程序有不同的类型,它们可以被不同版本的 Java 使用。而且,新的 Java 规范总是在开发之中,因为通过 Java 社区过程(Java Community Process,http://www.jcp.org),相关的功能在不断地扩展中。
JDBC 版本
DB2 通用数据库 V8.1 支持 JDBC V2.1 规范和部分 JDBC 3.0 规范。使用通用 JDBC 驱动程序,全面支持 JDBC 3.0 需求的计划正在进行之中。
JDBC 驱动程序被认证为 J2EE 解决方案的一个组件。驱动程序认证的结果总是发布在 Sun 兼容性网站上。
JDBC 驱动程序体系结构
JDBC 驱动程序体系结构分为四种类型。
JDBC Type 1 驱动程序
JDBC Type 1 驱动程序基于 JDBC-ODBC 桥。因此 ODBC 驱动程序可以与此类 JDBC 驱动程序(由 Sun 提供)结合起来使用。IBM 不支持 Type 1 驱动程序,因此它不是推荐的环境。图 1 显示了 JDBC Type 1 驱动程序的示例:
图 1. JDBC Type 1 驱动程序
JDBC Type 2 驱动程序
JDBC Type 2 驱动程序依靠特定于操作系统的库(共享库)来与 RDBMS 通信。应用程序将装入这种 JDBC 驱动程序,而驱动程序将使用共享库来与 DB2 服务器通信。DB2 UDB for Linux, UNIX® 和 Windows® V8.1 提供了两种不同的 Type 2 驱动程序:
- 旧的/CLI JDBC 驱动程序在文件
db2java.zip
中提供。其实现包名称为COM.ibm.db2.jdbc.app.DB2Driver
。该驱动程序目前已被用于进行 J2EE 认证。其别名“app 驱动程序”源自于一种观念及其包名称,这种观念就是:此驱动程序将通过远程数据库的本地 DB2 UDB 客户机执行本地连接。 - 通用 JDBC 驱动程序在文件
db2jcc.jar
中提供。其实现包名称为com.ibm.db2.jcc.DB2Driver
。此驱动程序是 DB2 UDB for Linux, UNIX 和 Windows V8.1 中的新功能。在最初的实现(V8.1)中,此驱动程序用于使用 Type 4 驱动程序体系结构与 DB2 服务器进行直接的 Java 连接。在 DB2 V8.1.2 中,您可以在 Type 2 体系结构中使用此驱动程序。在 Type 2 体系结构中使用此驱动程序的一个主要原因是为了本地应用程序性能和分布式事务支持。通用 JDBC Type 2 驱动程序分别使用com.ibm.db2.jcc.DB2XADataSource
和com.ibm.db2.jcc.DB2ConnectionPoolDataSource
来支持分布式事务和连接池。
可以使用 JDBC Type 2 驱动程序来支持 JDBC 应用程序。WebSphere Application Server 同时支持这两种 Type 2 驱动程序。注:在将来的版本中不会对旧的/CLI Type 2 驱动程序进行增强。
图 2 显示了使用 JDBC Type 2 驱动程序的应用程序的典型拓扑结构:
图 2. 使用 JDBC Type 2 驱动程序的应用程序
JDBC Type 3 驱动程序
JDBC Type 3 驱动程序是一种纯 Java 实现,它必须与 DB2 JDBC Applet 服务器(DB2 JDBC Applet Server)通信才能访问 DB2 数据。此类驱动程序旨在使 Java applet 能访问 DB2 数据源。在图 3 所显示的方案中,应用程序与安装有 DB2 客户机另一台机器进行通信。
图 3. 使用 Type 3 JDBC 驱动程序的典型应用程序方案
JDBC Type 3 驱动程序常被称作“网络(net)驱动程序”,它是根据其包名 COM.ibm.db2.jdbc.net
命名的。DB2 V8.1 支持网络驱动程序,可以将其用于 JDBC 应用程序。
Type 3 驱动程序要求 db2java.zip
驱动程序总是处于与 DB2 Applet 服务器相同的维护级别。如果驱动程序在 applet 内使用,这就不是一个问题,因为浏览器会在应用程序执行期间下载相应的 db2java.zip
文件。许多客户使用 Type 3 驱动程序而不是 Type 2 驱动程序,以避免必需的 DB2 客户机安装和必需的 DB2 CATALOG DATABASE
命令,后者用于创建使用旧的/CLI 驱动程序进行 Type 2 连接所必需的数据库目录信息。目前,WebSphere Application Server 和其它 J2EE 服务器不支持 IBM Type 3 驱动程序,因为该驱动程序不支持分布式事务(JTA)。将来的版本不会对 Type 3 驱动程序进行增强。
我们鼓励使用通用 JDBC Type 4 驱动程序来替代 Type 3 驱动程序。
JDBC Type 4 驱动程序
Type 4 驱动程序是仅用于 Java 的 JDBC 驱动程序,它直接连接到数据库服务器。DB2 UDB for Linux, UNIX 和 Windows V8.1 引入了称为“通用 JDBC 驱动程序(Universal JDBC driver)”的 Type 4 驱动程序。通用 JDBC 驱动程序在文件 db2jcc.jar
中提供。其实现包名为 com.ibm.db2.jcc.DB2Driver
。
请注意,通用 Type 2 和通用 Type 4 驱动程序具有相同的实现类名称。有两种方法可以区别 DB2 在内部将实例化哪个驱动程序:
- 使用连接特性来确定连接是否使用共享库(Type 2),或者驱动程序是否会启动来自 Java 应用程序的直接连接(Type 4)。
- 使用不同的连接 URL 模式来指示您想要 Type 2 和 Type 4 行为中的哪一种。
Type 4 URL 模式的示例:字符串“
jdbc:db2://server1:50000/sample
”要求 JDBC 驱动程序将 Java 应用程序直接连接到 DB2 服务器上名为“sample”的数据库,该数据库位于配置在 DB2 服务器(主机名为 server1)上的 DB2 实例中,而 DB2 服务器则在端口 50000 上进行侦听。Type 2 URL 模式的示例:字符串“
jdbc:db2:sample
”。有关 DB2 服务器(“server1”)和端口(“50000”)的信息可以在 DB2 客户机编目目录中找到。
通用 JDBC 驱动程序是一种与驱动程序类型连通性或目标平台无关的抽象 JDBC 处理器。通用 JDBC 驱动器是一种与体系结构无关的 JDBC 驱动程序,用于进行分布式和本地 DB2 UDB 访问。因为通用 JDBC 驱动程序独立于任何特定 JDBC 驱动程序类型连通性或目标平台,所以它在一个 DB2 UDB 驱动程序实例中同时支持所有 Java 连通性(Type 4 驱动程序)和基于 JNI 的连通性(Type 2 驱动程序)。该驱动程序可以用于独立 Java 应用程序或多层应用程序。
重要:就 DB2 UDB V8.1.2 而言,通用 JDBC 驱动程序要求 CLASSPATH 中有许可证 JAR 文件和 db2jcc.jar
文件。以下是所需的许可证 JAR 文件:
- 对于 Cloudscape™ Network Server V5.1:
db2jcc_license_c.jar
- 对于 DB2 UDB V8 for Linux, UNIX 和 Windows 服务器:
db2jcc_license_su.jar
- 对于 DB2 UDB for iSeries® and z/OS 服务器(与 DB2 Connect 和 DB2 Enterprise Server Edition 一起提供):
db2jcc_license_cisuz.jar
通用驱动程序可以通过使用预先安装在目标服务器上的必备存储过程,来查询数据库元数据目录及检索服务器错误消息文本:
- 对于 Linux、UNIX 和 Windows 上的 UDB V8,这些存储过程是预先安装的。
- 对于 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 将会预先安装必需的存储过程。
- 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 将会预先安装必需的存储过程。
图 4 中显示了 Type 4 JDBC 驱动程序实现。注:从 Linux、UNIX 和 Windows 上的 Java 应用程序或 applet 连接到 DB2 for z/OS and OS/390 所用的通用 JDBC/SQLJ 驱动程序(Type 4 和 Type 2)需要适当的许可证文件(db2jcc_license_cisuz.jar
)。该许可证文件是随 DB2 Connect 产品一起提供的。
图 4. Type 4 JDBC 驱动程序实现
Java 开发工具箱(JDK)和 Java 运行时环境(JRE)
每个 JDBC 版本都有相关联的 JDK/JRE。
- JDBC 2.0 和 JDBC 2.1 API 被分入两个包:
- java.sql 包(包括核心 API;它是 JDBC 1.22 API 的增强)
- javax.sql 包(可选的包,用于支持连接池、分布式事务及其他类似的高级功能)。
- J2SE(Java 2,标准版,在 JDK 1.2 及更高版本中实现)支持 JDBC 2.0 和 JDBC 2.1 核心 API,J2EE 1.3 支持 JDBC 2.0 可选包。
- JDBC 3.0 最终于 2002 年 5 月完成,并已合并入 J2SE 1.4 和 J2EE 1.4。
许多客户使用 1.3.1 环境开发和部署 Java 应用程序。这是目前推荐的 DB2 Java 应用程序环境。通用 JDBC 驱动程序需要 1.3.1 环境。注:在 JDK 1.4 环境中支持具有通用 JDBC 驱动程序的 JDBC 3.0 API 的一些计划正在进行之中。
常见问题及解答
问题 1:从哪儿可以得到 DB2 UDB JDBC Type 4 驱动程序?
答案 1:该驱动程序与 DB2 UDB 客户机一起提供,您也可以下载 DB2 UDB Express 或 DB2 UDB Personal Developers Edition 的试用版。
答案 3:在 DB2 UDB V8.1 中使用通用 JDBC 驱动程序支持可更新、可滚动游标。如果您正在使用 DB2 UDB for Linux、UNIX 和 Windows V7.x,那么您可以使用旧的/CLI 驱动程序和 setCursorName API 来模拟可更新、可滚动游标。我们建议您迁移到通用 JDBC 驱动程序。
问题 4:我能使用 DB2 JDBC Type 4 驱动程序连接到 DB2 UDB for z/OS and OS/390 吗?
答案 4:能,您将需要 DB2 Connect 许可证。
问题 5:哪一种 JDBC 驱动程序最快?
答案 5:答案因配置而异。如果 Java 应用程序与 DB2 服务器在同一台机器上运行,那么通用 Type 2 驱动程序将具有最佳性能,因为能够避免 TCP/IP 开销并因而提高吞吐量。当 DB2 服务器与 Java 应用程序在不同的机器上时,通用 Type 4 和 Type 2 驱动程序的性能不相上下。如果您试图改善 Java 应用程序的整体性能,那么您总是应该考虑编写更有效率的 SQL 语句,或者使用 SQLJ 或存储过程。
问题 6:在哪里可以找到有关 DB2 UDB 和受支持的 Java 环境的信息?
答案 6:查阅以下网站:http://www-3.ibm.com/software/data/db2/udb/ad/v8/java/ 。
问题 7:旧的/CLI 驱动程序和通用驱动程序之间有什么差异吗?
答案 7:从根本上来说,它们都提供 JDBC 2.1/J2EE 1.3 级别 API 支持。通用驱动程序提供 JDBC 3.0 规范的最新功能。驱动程序之间也略微存在一些差异,因为新的驱动程序基于称为 DRDA(分布式关系数据库体系结构,Distributed Relational Database Architecture)的开放数据库访问标准。这里记录了这些差异。
问题 8:我怎样才能够使用通用驱动程序跟踪 SQL 语句?
答案 8:可以使用 DataSource 或 Connection 特性进行跟踪。请参阅文档以获取更多信息。
问题 9:为什么应该考虑用 SQLJ 替代 JDBC,如何开始?
答案 9:请阅读题为考虑将 SQLJ 用于 DB2 V8.1 Java 应用程序的 DB2 开发者园地文章。
关于作者
![]() | Paul C. Zikopoulos 是来自 IBM 数据管理软件部门的一名 IDUG 主要演讲人,并曾因此获奖。他有七年多 DB2 经验,并撰写了众多有关 DB2 的杂志文章。Paul 与人合著了以下几本著作:DB2: The Complete Reference、DB2 Fundamentals Certification for Dummies、DB2 for Dummies 和 A DBA's Guide to Databases on Linux。Paul 是一名 DB2 认证高级技术专家(DB2 Certified Advanced Technical Expert,DRDA 和 Cluster/EEE),他还是 DB2 认证的解决方案专家(DB2 Certified Solutions Expert,商业智能和数据库管理)。可以通过 |
![]() | Grant Hutchison 是 IBM 位于多伦多实验室的 DB2 集成中心的技术经理,他领导 DB2 和 WebSphere 集成工作。他有 12 年的 DB2 经验,担任过开发人员、服务分析人员和顾问。最近,他在滑铁卢大学(University of Waterloo)完成了软件工程研究生学位。 |