按照 JDBC 2 规范,有四种类型的 JDBC 驱动程序体系结构:
DB2 版本 8 支持类型 2、3 和 4 的 JDBC 驱动程序。前一个发行版中的 JDBC 驱动程序构建于 DB2 CLI(调用层接口,Call Level Interface)之上。DB2 版本 8 的类型 2 和类型 3 驱动程序继续使用 DB2 CLI 接口来与 DB2 UDB 服务器(OS/390® 和 z/OS™、UNIX®、Windows®、Linux 和 iSeries™)通信。 DB2 版本 8 添加了一种新的 DB2 JDBC 通用驱动程序(类型 4),它使用分布式关系数据库体系结构(Distributed Relational Database Architecture™(DRDA®))协议来进行客户机/服务器通信。
DB2 JDBC 应用程序(类型 2)驱动程序( 图 1)使 Java 应用程序能够通过 JDBC 调用 DB2。对 JDBC 应用程序驱动程序的调用被转换成 Java 本机方法。使用这种驱动程序的 Java 应用程序必须在 DB2 客户机上运行,JDBC 请求通过该客户机流到 DB2 服务器。需要 DB2 Connect™ 版本 8 许可证/安装来访问 DB2 for OS/390 数据库。
在 COM.ibm.db2.jdbc.app包中包含了 DB2 JDBC 应用程序(类型 2)驱动程序。
JDBC 1 连接
用于建立至 DB2 UDB 服务器的连接的实现类包括:
JDBC 2 连接
用于建立至 DB2 UDB 服务器的连接的实现类包括:
要将应用程序配置成使用由 DB2 JDBC 应用程序(类型 2)驱动程序实现的 DataSource,需要下列信息:
databaseName数据库名称。
user用于连接数据库的用户标识。
password 用于连接数据库的密码。
用于 JDBC 和 SQLJ 的 DB2 瘦客户机驱动程序
DB2 UDB 版本 8 为 JDBC 和 SQLJ 应用程序提供了类型 3 和类型 4“瘦”驱动程序。 图 2 描述了这两种驱动程序的体系结构。
DB2 JDBC 类型 3 驱动程序
DB2 JDBC 类型 3 驱动程序,也称为 applet 或网络驱动程序,它由 JDBC 客户机和 JDBC 服务器组成。DB2 JDBC applet 驱动程序可以与 applet 一起由 Web 浏览器装入,或者可以在单独的 Java 应用程序中使用 applet 驱动程序。当 applet 请求至 DB2 数据库的连接时,applet 驱动程序打开至 DB2 JDBC applet 服务器的 TCP/IP 套接字,DB2 JDBC applet 服务器位于正在运行 Web 服务器的机器上。
建立好连接之后,applet 驱动程序通过 TCP/IP 连接将每个随后来自 applet 的数据库访问请求发送到 JDBC 服务器。然后,JDBC 服务器进行相应的 DB2 调用以执行任务。完成后,JDBC 服务器通过该连接将结果发回 JDBC 客户机。JDBC 服务器进程是 db2jd。
在 COM.ibm.db2.jdbc.net包中包含了 DB2 JDBC 类型 3 驱动程序。
JDBC 1 连接
用于建立至 DB2 UDB 服务器的连接的实现类包括:
JDBC 2 连接
用于建立至 DB2 UDB 服务器的连接的实现类包括:
要将应用程序配置成使用由 DB2 JDBC 类型 3 驱动程序实现的数据源,需要下列信息:
databaseName数据库名称。
serverName JDBC applet 服务器进程所驻留的服务器名。
portNumber JDBC applet 服务器进程使用的端口号(缺省端口是 6789)。
user 用于连接到数据库的用户标识。
password 用于连接到数据库的密码。
DB2 JDBC 类型 3 驱动程序没有提供 Java 事务 API(JTA)支持。JTA 提供了一个接口来完成分布式(两阶段提交)事务。
在 DB2 版本 8 中,对 JDBC 驱动程序添加了许多新的特性和增强。在这些变化当中,最大的变化是体系结构的改进,它缩短了 JDBC 驱动程序和 DB2 服务器之间的代码路径。这种新的 IBM JDBC 通用驱动程序基于开放分布式协议(也就是分布式关系数据库体系结构(DRDA)),并与所有 DB2 服务器平台(UNIX、Windows、Linux 和 z/OS)相兼容,不过这些服务器平台必须具备相应的 DRDA 应用程序服务器(Application Server (AS))级别的支持,以及必须预先具备的存储过程。
新的 IBM DB2 JDBC 通用驱动程序所独有的特性包括:
要使用 JDBC 通用驱动程序,在 Java CLASSPATH 环境变量中必须包含 db2jcc.jar 。
DB2 JDBC 通用驱动程序类型 4 驱动程序包含在com.ibm.db2.jcc 包中。
JDBC 1 连接
DB2 UDB 版本 8 服务器将使用在 DB2 DBM 配置文件(SVCENAME)中指定的 TCP/IP 连接来与新的 DB2 JDBC 通用驱动程序通信。
用于建立至 DB2 UDB 服务器的连接的实现类包括:
可以使用下面的 URL 创建连接对象:jdbc:db2://server:port/database
JDBC 2 连接
用于建立至 DB2 UDB 服务器的连接的实现类包括:
要将应用程序配置成使用由 DB2 JDBC 通用驱动程序(类型 4)实现的 DataSource,需要下列信息:
databaseName数据库名称。
user 用于连接数据库的用户标识。
password 用于连接数据库的密码。
driverType所使用的驱动程序类型(4)(必需)。
serverNameDRDA 服务器的 TCP/IP 地址或主机名。
portNumber DRDA 服务器用来侦听至数据源的连接请求的 TCP/IP 端口号。
请参考 附录 A,以获取其它 DB2 JDBC 通用驱动程序(类型 4)信息。
DB2 SQLJ 支持允许您构建和运行 SQLJ applet 和应用程序。这些 Java 程序包含被预编译并绑定到 DB2 UDB 数据库的嵌入式 SQL 语句。
SQLJ 标准有三个组件:转换器、定制器和运行时环境。转换器根据源 SQLJ 程序内部的嵌入式 SQL 语句产生 Java 代码。SQL 语句的二进制表示是在一个单独的序列化概要文件( .ser 文件)中创建的。当使用 db2sqljcustomize 命令定制该概要文件时,会创建静态 SQL 包。SQLJ 应用程序需要 db2jcc.jar 文件,SQLJ 程序准备同样需要 sqlj.zip 文件。
SQLJ 提供了:
DB2 版本 8 提供了下列 SQLJ 实用程序,如 图 3中所示:
sqlj IBM SQLJ 转换器。它转换 .sqlj 源文件并创建序列化概要文件和程序。
db2sqljcustomize定制器和在线检查器。它为序列化概要文件创建 DB2 定制,可以选择在线检查能够动态预编译的 SQL 语句,也可以选择(缺省情况下)为该程序绑定 DB2 包。,并随意地(缺省情况下)为该程序绑定 DB2 包。
db2sqljbind独立的绑定器。它将先前定制的 SQLJ 概要文件绑定到数据库。
db2sqljprint打印 DB2 定制概要文件的内容。
在 sqlj 程序在运行时对 DB2 执行静态 SQL 之前,必须定制从 sqlj 转换器输出的序列化概要文件。如果没有进行定制,则应用程序将动态执行包含在概要文件中的 SQL 语句。
Java 2 平台,企业版(J2EE)定义用于开发多层企业应用程序的标准。J2EE 平台管理基础结构并支持 Web 服务,以开发安全的、健壮的和能够互操作的企业应用程序。J2EE 不仅利用了 Java 2 平台,标准版(J2SE)的许多特性(如“编写一次,就可以到处运行(Write Once, Run Anywhere)”的可移植性和用于数据库访问的 JDBC API ),而且还添加了对 Enterprise JavaBeans™(EJB)组件、Java Servlet、JavaServer Pages™(JSP)和 XML 技术的全面支持。有了简单性、可移植性、可伸缩性以及与旧系统的集成,J2EE 技术及其基于组件的模型就可以简化企业开发和部署。
J2EE 应用程序模型将企业应用程序分成三个基础部分: 组件、 容器和 连接器。组件是应用程序开发人员的主要关注点,而系统供应商实现容器和连接器以隐藏复杂性和提高可移植性。容器在客户机和组件之间进行协调,并透明地为两者提供服务,包括事务支持和资源合用。容器协调允许在部署时指定许多个组件行为,而不是在程序代码中指定。连接器位于 J2EE 平台之下,定义可移植的服务 API 以插入现有企业供应商所提供的东西。连接器通过启用各种特定服务的实现来提高灵活性。
就象用其它语言一样,可以用 Java 创建存储过程和 SQL 语言扩展(又称为用户定义的函数)。必须在数据库中使用 CREATE PROCEDURE 语句注册存储过程。可以使用 CREATE FUNCTION 语句注册基于 Java 的 UDF。然后,可以使用任何受支持的客户机 API(如 JDBC、ODBC 和 SQLJ)从应用程序调用存储过程。可以使用任何 SQL 语句调用基于 Java 的 UDF。可以在其自己的地址空间(FENCED)或与 DB2 UDB 相同的地址空间(NOT FENCED)中执行该存储过程或 UDF。
现在,在 DB2 UDB 版本 8 中,可以将 Java 存储过程和 UDF 注册为 THREADSAFE 或 NOT THREADSAFE。Java 过程和函数的 THREADSAFE 选项将导致在 DB2 UDB 服务器上使用单个 JVM(Java 虚拟机)。版本 8 中 Java 过程和函数的缺省选项是 THREADSAFE,所以对于并发的 Java 存储过程,需要更少的内存。因为不再需要装入多个 JVM,所以还可以改进性能。