热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

DB2UDBforLinux,UNIX和Windows中的Java开发概述:V8.1更新版

FORM:http:www-900.ibm.comdeveloperWorkscndmddlibrarytecharticles0307zikopoulos0307zikopoul

FORM:  http://www-900.ibm.com/developerWorks/cn/dmdd/library/techarticles/0307zikopoulos/0307zikopoulos.shtml

 

DB2 UDB for Linux, UNIX 和 Windows 中的 Java 开发概述:V8.1 更新版


Paul Zikopoulos 和 Grant Hutchison
IBM 加拿大
2003 年 10 月

©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 驱动程序体系结构分为四种类型。


  • Type 1
  • Type 2
  • Type 3
  • Type 4


JDBC Type 1 驱动程序

JDBC Type 1 驱动程序基于 JDBC-ODBC 桥。因此 ODBC 驱动程序可以与此类 JDBC 驱动程序(由 Sun 提供)结合起来使用。IBM 不支持 Type 1 驱动程序,因此它不是推荐的环境。图 1 显示了 JDBC Type 1 驱动程序的示例:

图 1. JDBC Type 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.DB2XADataSourcecom.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 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 驱动程序

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 驱动程序实现
JDBC Type 4 驱动程序


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 ReferenceDB2 Fundamentals Certification for DummiesDB2 for DummiesA DBA's Guide to Databases on Linux。Paul 是一名 DB2 认证高级技术专家(DB2 Certified Advanced Technical Expert,DRDA 和 Cluster/EEE),他还是 DB2 认证的解决方案专家(DB2 Certified Solutions Expert,商业智能和数据库管理)。可以通过
paulz_ibm@msn.com 与他联系。
 
照片:[作者姓名] Grant Hutchison 是 IBM 位于多伦多实验室的 DB2 集成中心的技术经理,他领导 DB2 和 WebSphere 集成工作。他有 12 年的 DB2 经验,担任过开发人员、服务分析人员和顾问。最近,他在滑铁卢大学(University of Waterloo)完成了软件工程研究生学位。


推荐阅读
  • Mysql安装和初步使用
    2019独角兽企业重金招聘Python工程师标准一、安装1、下载及安装:官网:https:downloads.mysql.comarchivesc ... [详细]
  • 用户管理_用户管理的小项目
      之前学习链表数据结构的时候,写过(相信很多人都做过)dos窗口版的学生管理系统,通过输入数字来实现CURD学生的信息,顶多就是把数据写入文件来存储数据 ... [详细]
  • nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 【Zabbix4.2学习笔记】1、CentOS7.5安装zabbix4.2
    1、关闭防火墙和selinux#systemctlstopfirewalld#vimetcselinuxconfigSELINUXpermissive#setenforce02、添加zabbix存储库rpm-Uvhh ... [详细]
  • nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 我的LINUX学习之路之二十一之web服务器简单搭建
    今天说说如何搭建HTTP服务器!目的:使用“多IP地址”方法实现多个网站。使用“主机头名”方法实现多个网站。使用“多端口”方法实现多个网站。这回用图形界 ... [详细]
  • 也就是|单打_.net Core 自我学习随笔——工作的核心:增删改查
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了.netCore自我学习随笔——工作的核心:增删改查相关的知识,希望对你有一定的参考价值。上次介绍了一下如何进行连接 ... [详细]
  • 闲话少说,直接切入主题,之前也是用一下其他的IDE,但是总是在vi和IDE之间来回切换,比较麻烦,于是乎,找了几个插件亲身体验,功能挺不错;1、安装vi7.0vim的官方网站是:www.vmuni ... [详细]
  • 如何理解MyBatis动态SQL
    本篇内容主要讲解“如何理解MyBatis动态SQL”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解M ... [详细]
  • linux json 写sql注入,sql注入之json注入(php代码)
    环境phpstudyphp服务端代码security数据库中的users表中的username,password字段用户名adminJSON服务端代码大家实际测试中注 ... [详细]
  • centos卸载不必要的程序_在 Linux 中移除从源代码安装的程序的一种简单的方法...
    不是所有的程序都可以在官方或者第三方库中找到,因此你不能使用常规的包管理来安装它们。有时你不得不从源代码中手动构建这些程序。就如你已经知道的一样,当你从 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
author-avatar
dvs5453401
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有