DB2 驱动程序

以下部分描述如何为 DB2 配置和使用 BEA WebLogic Type 4 JDBC 驱动程序:

支持的数据库版本
DB2 驱动程序类
DB2 URL
DB2 连接属性
在 AS/400 上设置 locationName
创建 DB2 包
数据类型
为目录方法使用非默认 Schema
SQL 转义序列
隔离级别
使用可滚动游标
JTA 支持
大型对象 (LOB) 支持
插入和更新批处理的性能变通方法
参数元数据支持
ResultSet 元数据支持
Rowset 支持
自动生成关键字支持
已知问题



--------------------------------------------------------------------------------

支持的数据库版本
用于 DB2 的 BEA WebLogic Type 4 JDBC 驱动程序(“DB2 驱动程序”)支持:

通过 DRDA 在 Linux、UNIX 以及 Windows 上运行的 DB2 Universal Database (UDB) v7.x、v8.1 以及 v8.2
通过 DRDA 在 z/OS 上运行的 DB2 UDB v7.x 以及 v8.1
通过 DRDA 用于 iSeries 的 DB2 UDB V5R1、V5R2 和 V5R3
注意: 本文档使用下列术语描述不同的 DB2 版本:

“用于 Linux/UNIX/Windows 的 DB2”是指 Linux、UNIX 和 Windows 平台上的所有 DB2 版本。
“用于 z/OS 的 DB2”是指 z/OS 平台上的所有 DB2 版本。
“用于 iSeries 的 DB2”是指 iSeries 平台上的所有 DB2 版本。



--------------------------------------------------------------------------------

DB2 驱动程序类
BEA WebLogic Type 4 JDBC DB2 驱动程序的驱动程序类是:

XA: weblogic.jdbcx.db2.DB2DataSource Non-XA: weblogic.jdbc.db2.DB2Driver在 WebLogic Server 域中配置 JDBC 数据源时使用这些驱动程序类。




--------------------------------------------------------------------------------

DB2 URL
要连接到 DB2 数据库,请使用相应的 URL 格式:

Windows NT、Windows 2000、Windows 2003、Windows XP、UNIX、Linux 和 Linux/s3901 上的 DB2:
jdbc:bea:db2://db2_server_name:port;DatabaseName=your_databaseOS/390、z/OS、iSeries 和 AS/4001 上的 DB2:
jdbc:bea:db2://db2_server_name:port;Location=db2_location;CollectionId=your_collectionname


--------------------------------------------------------------------------------

DB2 连接属性
表 3-1 列出 DB2 驱动程序支持的 JDBC 连接属性,并描述了每个属性。可以在 WebLogic Server 域中的 JDBC 数据源配置中使用这些连接属性。

注意: 所有的连接属性名称都不区分大小写。例如,Password 与 password 相同。必需属性也是这样。列举的每个连接属性的数据类型是 JDBC 数据源中属性值的 Java 数据类型。

要指定属性,请在 JDBC 数据源配置中使用以下形式:

property=value


表 3-1 DB2 连接属性 属性 描述
AddToCreateTable
可选 自动添加到所有 Create Table 语句中的字符串。此字段主要供需要添加“in database”子句的用户使用。
AllowImplicitResultSetCloseForXA
可选 {true/false}。DB2 提供在提取结果集中的所有行之后,自动关闭结果集的机制。此机制通过减少数据库往返次数来提高应用程序的性能。WebLogic DB2 驱动程序在默认情况下使用此机制。
注意: 已发现在使用此机制时会出现问题。作为变通方法,应当将 AllowImplicitResultSetCloseForXA=false 添加到数据源配置中的属性中。


默认为 true。
AlternateID
可选 将非限定 SQL 标识符使用的默认 DB2 Schema 设置为指定值。该值必须是有效 DB2 Schema。
BatchPerformanceWorkaround
可选 {true/false}。对于 DB2 UDB 8.1,使用本地 DB2批处理机制。此属性确定强制使用哪些限制以简化数据转换。
设置为 false 时,用于设置使用 PreparedStatement 执行的批处理操作参数值的方法必须与参数的关联列的数据库数据类型相匹配。这是因为 DB2 服务器不执行隐式数据转换。
设置为 true 时,会删除此限制;不过,可能不会按照指定参数的顺序执行参数设置。
默认值为 false。
有关详细信息,请参阅插入和更新批处理的性能变通方法。
注意: 如果将数据源用作使用“用于 DB2 的 WebLogic Type 4 JDBC 驱动程序”的 JMS JDBC 存储,则必须将 BatchPerformanceWorkaround 属性设置为 true。


CatalogIncludesSynonyms
可选 {true/false}。设置为 true 时,下列 DatabaseMetaData 方法返回的结果集中会包含同义词:getColumns、getProcedureColumns 和 getIndexInfo。设置为 false 时,结果集中将不包含同义词。
默认为 true。
CatalogSchema
可选 用于目录功能的 DB2 Schema。该值必须是有效 DB2 Schema 的名称。
默认值是 SYSCAT(对于 DB2 UDB)、SYSIBM(对于 DB2 OS/390)和 QSYS2(对于 DB2 iSeries)。
为提高性能,可在默认目录 Schema 以外的 Schema 中创建系统目录表的视图。通过将此属性设置为包含目录表视图的 Schema,可以使驱动程序能够使用这些视图。为确保目录方法能够正常运行,必须在指定 Schema 中包含特定目录表。需要哪些视图由 DB2 数据库决定。有关必需的目录表视图,请参阅为目录方法使用非默认 Schema。
CharsetFor65535
可选 用于转换在使用 CCSID 65535 定义的字符列中作为位数据存储的字符数据(Char、Varchar、Longvarchar、Char for Bit Data、Varchar for Bit Data 和 Longvarchar for Bit Data)的代码页。从使用 CCSID 65535 定义其列的数据库检索的作为位数据存储的所有字符数据均使用指定的代码页进行转换。其值必须为包含 Java 虚拟机所支持有效代码页的名称的字符串,例如,CharsetFor65535=CP950。在将数据写入 CCSID 65535 定义的字符列时,此属性不生效。
CodePageOverride
可选 将用于转换 Character 和 Clob 数据的代码页。指定的代码页将替代默认的数据库代码页。从数据库中检索或写入数据库的所有 Character 和 Clob 数据都使用指定代码页转换。值必须是包括有效代码页名称且受 Java 虚拟计算机支持的字符串,如 CodePageOverride=CP950。
CollectionId
可选 包与其绑定的集合(一组包)。
对于 DB2 UDB,忽略此属性。
默认值为 NULLID。
ConnectionRetryCount
可选 在建立成功连接之前,驱动程序重试连接的次数。有效值为 0 和任何正整数。
若设置为 0,则如果驱动程序第一次尝试创建连接之后没有成功建立连接,那么驱动程序不会重试连接。
默认为 0。
ConnectionRetryDelay
可选 在将 ConnectionRetryCount 设置为正整数时,驱动程序在连接重试尝试之间等待的秒数。
默认值为 3。
CreateDefaultPackage
可选 {true/false}。确定是否应创建默认包。对于 DB2 OS/390 和 DB2 iSeries,在 CollectionId 属性指定的集合中创建包。此参数用于还不存在包的情况。
有关创建 DB2 包的详细信息,请参阅创建 DB2 包。
默认值为 false。
DatabaseName 要连接的数据库的名称(用于 UDB)。
DynamicSections
可选 指定 DB2 驱动程序包可为单个用户准备的语句数。
默认值为 200。
Grantee
可选 指定对于 DB2 包,要为其授予 EXECUTE 权限的 Schema 的名称。如果 GrantExecute 属性设置为 false,则此属性被忽略。
有关创建 DB2 包的详细信息,请参阅创建 DB2 包。
默认值为 PUBLIC。
GrantExecute
可选 {true/false}。确定是否为用于创建 DB2 包的 Schema 以外的 Schema 授予对这类包的 EXECUTE 权限。如果设置为 true,则向 Grantee 属性指定的 Schema 授予 EXECUTE 权限。如果设置为 false,则向其他 Schema 授予 EXECUTE 权限。
有关创建 DB2 包的详细信息,请参阅创建 DB2 包。
默认为 true。
InsensitiveResultSetBufferSize {-1 | 0 | x}. 确定驱动程序用于缓存不区分大小写结果集数据的内存量。它必须具有下列值之一:
如果设置为 –1,驱动程序会在内存中缓存所有不敏感结果集数据。如果结果集的大小超过可用的内存,则生成 OutOfMemoryException。因为消除了将结果集写入磁盘的必要,所以驱动程序可以更有效地处理数据。
如果设置为 0,驱动程序会在内存中缓存所有不敏感结果集数据,最大为 2 GB。如果结果集数据的大小超过可用内存,则驱动程序将把结果集数据记录在磁盘中。因为可能将结果集数据写入磁盘,所以驱动程序可能需要更改数据的格式以便将其正确写入磁盘。
如果设置为 x,其中 x 是一个正整数,指定用于缓存不敏感结果集数据的内存缓冲区大小 (KB)。如果结果集数据的大小超过缓冲区大小,则驱动程序将把结果集数据记录在磁盘中。因为可能将结果集数据写入磁盘,所以驱动程序可能需要更改数据的格式以便将其正确写入磁盘。指定缓冲区大小(2 的幂)可以更有效地使用内存。
默认值为 2048 (KB)
LocationName 要访问的 DB2 位置的名称(用于 OS/390 和 iSeries)。
LoginTimeout
可选 尝试创建数据库将等待的最大秒数。如果值为 0,则在存在默认系统超时的情况下,指定超时为该默认值;否则,指定不存在超时。
PackageOwner
可选 指定 DB2 包的所有者。
有关创建 DB2 包的详细信息,请参阅创建 DB2 包。
默认值为 NULL。
密码 用于连接到 DB2 数据库且区分大小写的密码。只有在数据库中启用安全时才需要密码。如果在这种情况下,请联系系统管理员以获取密码。
PortNumber
可选 数据库服务器用于监听连接的 TCP 端口。默认值为 50000。
ReplacePackage
可选 {true/false}。指定当前绑定流程是否应替换现有的 DB2 包。在 DB2 UDB 上,必须将此属性与 CreateDefaultPackage 一起使用。
有关创建 DB2 包的详细信息,请参阅创建 DB2 包。
默认值为 false。
SecurityMechanism
可选 {ClearText | EncryptedPassword | EncryptedUIDPassword}。确定在建立连接时,驱动程序用于向 DB2 服务器对用户进行身份验证的安全方法。如果 DB2 服务器不支持指定的身份验证方法,则连接会失败且驱动程序生成异常。
如果设置为 ClearText,驱动程序会向 DB2 服务器发送明文形式的密码,以用于身份验证。
如果设置为 EncryptedPassword,驱动程序会向 DB2 服务器发送加密形式的密码,以用于身份验证。
如果设置为 EncryptedUIDPassword,驱动程序会向 DB2 服务器发送加密形式的用户 ID 和密码,以用于身份验证。
默认值为 ClearText。
需要 JDK 1.4 或更高版本。
SendStreamAsBlob
可选 {true/false}。确定将小于 32K 字节的二进制流数据作为 Long Varchar for Bit Data 数据还是 Blob 数据发送到数据库。小于 32K 字节的二进制流数据可插入最大长度为 32K 字节的 Long Varchar for Bit Data 列或 Blob 列。大于 32K 字节的二进制流只能插入 Blob 列。驱动程序始终将大于 32K 字节的二进制流数据作为 Blob 数据发送到数据库。
如果设置为 true,则驱动程序将小于 32K 字节的二进制流数据作为 Blob 数据发送到数据库。如果目标列为 Long Varchar for Bit Data 列而不是 Blob 列,则 Insert 或 Update 语句会失败。如果传递到驱动程序的流可重新设置,则驱动程序会自动重试 Insert 或 Update 语句,将数据作为 Long Varchar for Bit Data 发送。在 Insert 或 Update 列为 Blob 列的情况下,首先将长度小于 32K 字节的二进制流数据作为 Blob 发送可显著提高性能。
如果设置为 false,则驱动程序将小于 32K 字节的二进制流数据作为 Long Varchar for Bit Data 数据发送到数据库。如果目标列为 Blob 列而不是 Long Varchar for Bit Data 类,则 Insert 或 Update 语句会失败。驱动程序会重试 Insert 或 Update 语句,将数据作为 Blob 数据发送。
默认值为 false。
ServerName 数据库服务器的名称或 IP 地址。
StripNewlines
可选 {true/false}。指定是否将 SQL 语句中的新行字符发送到 DB2 服务器。在 StripNewlines=true 时,DB2 驱动程序会删除 SQL 语句中的所有新行字符。
默认为 true。
UseCurrentSchema
可选 {true/false}。指定如果调用 DatabaseMetaData.getTables 调用,但没有指定 Schema 或将 Schema 指定为通配符 %,是否将结果限制为当前 Schema 中的表。通过将结果限制为当前 Schema 中的表,可提高调用不修改 Schema 的 getTables 方法时的性能。
如果设置为 true,则 getTables 方法返回的结果被限制为当前 Schema 中的表。如果设置为 false,则不限制 getTables 方法的结果。
默认值为 false。
用户 用于连接到 DB2 数据库且区分大小写的用户名。
WithHoldCursors
可选 {true/false}。确定游标在提交时是否保持打开,DB2 在关闭所有打开的游标后(Delete 游标)或保持打开它们(Preserve 游标)。如果设置为 true,则游标的行为是 Preserve。如果设置为 false,则游标的行为是 Delete。如果回滚事务,则无论为此属性指定什么值,都会关闭所有游标。
默认为 true。





--------------------------------------------------------------------------------

性能注意事项
通过按照以下清单中所述为 DB2 驱动程序设置下列连接属性,可以提高应用程序的性能:

CatalogIncludesSynonyms
DatabaseMetaData.getColumns 方法常用于确定有关表的特征,其中包含同义词以及与表关联的别名。如果您的应用程序访问用于 Linux/UNIX/Windows 的 DB2 v7.1 或 v7.2、用于 z/OS 的 DB2 或者用于 iSeries 的 DB2,且该应用程序不使用数据库表同义词,则驱动程序可以忽略此信息以提高性能。在访问用于 Linux/UNIX/Windows 的 DB2 v8.1 和 v8.2 时,驱动程序始终为 DatabaseMetaData.getColumns() 方法返回同义词。

CatalogSchema
为提高性能,可以在默认目录 Schema 以外的目录 Schema 中创建系统目录表的视图。如果将此属性设置为包含目录表视图的 Schema 的名称,则 DB2 驱动程序可访问这些视图。默认目录 Schema 是 SYSCAT(对于用于 Linux/UNIX/Windows 的 DB2)、SYSIBM (对于用于 z/OS 的 DB2)和 QSYS2(对于用于 iSeries 的 DB2)。

为确保目录方法能够正常运行,必须在指定 Schema 中包含特定目录表。需要哪些视图由 DB2 数据库决定。有关指定 Schema 中必须包含的目标表的视图,请参阅为目录方法使用非默认 Schema。

InsensitiveResultSetBufferSize
要在使用滚动不敏感的结果集时提高性能,驱动程序可以在内存中缓存结果集数据而不是将其写入磁盘。默认情况下,驱动程序会在内存中缓存 2 MB 的不敏感结果集数据,然后将所有其余结果集数据写入磁盘。通过在将数据写入磁盘之前增加驱动程序使用的内存量,或者强制驱动程序不要将不敏感结果集数据写入磁盘,可以提高性能。最大的缓存大小设置为 2 GB。

MaxPooledStatements
当驱动程序没有在应用程序服务器中运行,或者没有在提供其自身预处理语句缓冲池的其他应用程序中运行时,若要提高性能,就必须启用驱动程序自身的预处理语句缓冲池。当启用驱动程序内部预处理语句缓冲池时,驱动程序会缓存应用程序创建的一定数量的预处理语句。例如,如果将 MaxPooledStatements 属性设置为 20,则驱动程序会缓存应用程序创建的最新的 20 预处理语句。如果为此属性设置的值大于应用程序所使用的预处理语句数量,则缓存所有预处理语句。

ResultSetMetaDataOptions
默认情况下,在调用 ResultSetMetaData.getTableName() 方法时,DB2 驱动程序会跳过为结果集中每列返回正确表名所需的其他处理。因此,getTableName() 方法可能会对结果集中的每一列返回空字符串。如果知道应用程序不需要表名称信息,则此设置将提供最佳性能。

有关返回 ResultSet 元数据的详细信息,请参阅 ResultSet 元数据支持。

SendStreamAsBlob
如果插入或更新的大型二进制对象被存储为 Blob,则可通过将二进制流作为 Blob 数据发送来提高性能。在这种情况下,此属性应当设置为 true。

StripNewLines
如果已知应用程序中使用的 SQL 语句不包含新行字符,则驱动程序可通过省略删除这些字符所需的解析操作来提高性能。在这种情况下,StripNewlines 属性应当设置为 false。

UseCurrentSchema
如果您的应用程序需要访问仅由当前用户所有的表和视图,则可通过将此属性设置为 true 来提高应用程序的性能。如果将此属性设置为 true,则在执行 getTables() 和 getColumns() 方法时,驱动程序仅返回当前用户所有的表和视图。如果将此特性设置为 true,相当于将连接时使用的用户 ID 作为 schemaPattern 参数传递给 getTables() 或 getColumns() 调用。




--------------------------------------------------------------------------------

在 AS/400上设置 locationName
在连接到 AS/400 上运行的 DB2 数据库时,必须设置 locationName 属性:

通过在 AS/400 上执行 WRKRDBDIRE 命令来获取“Relational Database”的值。
您将看到与以下内容相似的输出:

,Relational,,Remote,Option,,Database,,Location,,Text, , ,, , ,,S10B757B,,*LOCAL ,, ,在 Java 客户端中,设置具有“user”和“password”这两个 DB2 连接属性(请参阅 DB2 连接属性)的 Properties 对象。
在 Driver.connect() 中,指定以下字符串和 Properties 对象作为参数:
jdbc:bea:db2://<Host>:<Port>;LocationName=RelationalDatabaseName在此示例中,RelationalDatabaseName 是通过运行 WRKRDBDIRE 命令获得的 Database 值。

以下代码摘自 Java 客户端:

... Properties props = new Properties(); props.put("user", user); props.put("password", password); ... myDriver = (Driver)Class.forName("weblogic.jdbc.db2.DB2Driver").newInstance(); conn = myDriver.connect("jdbc:bea:db2://10.1.4.1:446;LocationName=S10B757B", props); stmt = conn.createStatement(); stmt.execute("select * from MYDATABASE.MYTABLE"); rs = stmt.getResultSet(); ...


--------------------------------------------------------------------------------

创建 DB2 包
DB2 包是 DB2 服务器上在程序处理期间生成的一个控制结构,用于执行 SQL 语句。DB2 驱动程序在连接时自动创建需要的所有 DB2 包。如果一个包已经存在,则驱动程序使用现有包建立连接。

注意: 初次建立连接可能需要几分钟时间,因为必须为连接创建包的数量和大小。之后建立连接时不会出现此延迟。

默认情况下,DB2 驱动程序创建的 DB2 包中包含 200 个动态部分,并且在 NULLID 集合(或库)中创建。在大多数情况下,无需创建 DB2 包,因为 DB2 驱动程序会在连接时自动创建它们。如果需要,可以通过下列任一方法创建 DB2 包:

通过手工方式,强制 DB2 驱动程序使用 WebLogic Server dbping 实用工具创建包。请参阅使用 dbping 创建 DB2 包。
通过在连接 URL 中设置特定连接属性自动创建包。请参阅使用连接属性创建 DB2 包。
注意: 您的用户 ID 必须在数据库中具有 CREATE PACKAGE 权限,否则必须由数据库管理员为您创建包。
注意: 您的用户 ID(JDBC 数据源配置中列出的用户 ID)必须是包的所有者。
注意: 创建 DB2 包的用户 ID 必须在数据库中具有 BINDADD 权限。请与数据库管理员联系以确保您具有正确权限。

使用 dbping 创建 DB2 包
要在具有 WebLogic Type 4 JDBC DB2 驱动程序的 DB2 服务器上创建包,可使用 WebLogic Server dbping 实用工具。dbping 实用工具用于测试客户端计算机与 DBMS 之间通过 JDBC 驱动程序建立的连接。因为 WebLogic Type 4 JDBC DB2 驱动程序会在尚不存在 DB2 包的情况下自动创建一个包,所以运行此实用程序会在 DB2 服务器上创建默认 DB2 包。

有关使用 dbping 实用工具创建 DB2 包的详细信息,请参阅使用 dbping 创建 DB2 包。

使用连接属性创建 DB2 包
您可以通过在初始连接 URL 中指定特定连接属性自动创建 DB2 包。表 3-2 列出了创建 DB2 包时应在初始连接 URL 中使用的连接属性:

注意: 建议不要将此方法用于 WebLogic Server JDBC 数据源,因为在这类数据源中,每个连接都使用相同的 URL 和连接属性。创建具有多个连接的 JDBC 数据源之后,应当在创建每个数据库连接时重新创建包。


表 3-2 创建 DB2 包时初始连接 URL 中的连接属性 属性 数据库
PackageCollection=collection_name
(其中,collection_name 是 DB2 包所绑定的集合或库的名称) 用于 z/OS 和 iSeries 的 DB2
CreateDefaultPackage=true 用于 Linux/UNIX/Windows、z/OS 和 iSeries 的 DB2
ReplacePackage=true 用于 Linux/UNIX/Windows 的 DB2
DynamicSections=x
(其中,x 是一个正整数) 用于 Linux/UNIX/Windows、z/OS 和 iSeries 的 DB2


使用 CreateDefaultPackage=TRUE 创建具有默认名称的包。如果使用 CreateDefaultPackage=TRUE 且没有指定 CollectionId,则会创建 NULLID CollectionId。

注意: 要在用于 Linux/UNIX/Windows 的 DB2 上新建 DB2 包,必须将 ReplacePackage=true 与 CreateDefaultPackage=true 一起使用。如果已存在一个 DB2 包,则在 ReplacePackage=true 时将替换它。

用于 Linux/UNIX/Windows 的 DB2 示例:
以下 URL 创建包含 400 个动态部分的 DB2 包。如果已存在任何 DB2 包,则新建的包将替换它们。

jdbc:bea:db2://server1:50000;DatabaseName=SAMPLE; CreateDefaultPackage=TRUE;ReplacePackage=TRUE;DynamicSections=400用于 z/OS 和 iSeries 的 DB2 示例:
以下 URL 创建包含 400 个动态部分的 DB2 包。

jdbc:bea:db2://server1:50000;LocationName=SAMPLE; CreateDefaultPackage=TRUE;DynamicSections=400有关 DB2 包中增加的动态部分的备注
动态部分是指包含满足动态 SQL 请求所需逻辑的实际可执行对象。这些部分用于句柄、预处理语句以及关联结果集。

在某些情况下,您可能需要创建其中包含的动态数量超过默认动态部分数量 (200) 的 DB2 包。如果您的应用程序需要在 DB2 包中包含大量动态部分,请考虑以下信息:

创建包含大量动态部分的 DB2 包可能会用完某些服务器资源。具体来说,可能需要增加数据库参数 PCKCACHE_SZ 的值,才能创建较大包。
创建更多动态部分会降低第一次创建 DB2 包的速度。
使用包含大量动态部分的 DB2 包可能影响应用程序性能。如果一次使用少量部分,则不会影响应用程序。如果一次使用大量部分,则由于数据库将使用更多资源检查所有打开部分以便将它们锁定,所以应用程序的性能可能会下降。
随着打开部分的数量增加,出现死锁情况的可能性也会上升。
如果您的应用程序主要执行 Select 语句,则最好在默认模式,即自动提交数据库的模式下运行它。即使已在应用程序中关闭语句,但在提交数据库之前,也不会在 DB2 包中释放动态部分。在此模式下,将在每次执行 SQL 语句时提交数据库并释放所有打开的部分。如果需要在手工提交模式下运行,则建议您尽可能频繁地提交数据库,以确保及时释放所有服务器资源。
缓存在 WebLogic Server 预处理语句缓存中的语句将始终使用部分,以保证可重用预处理语句。
DB2 服务器限制动态部分的数量。可以尝试创建多于服务器允许创建数量的部分。



--------------------------------------------------------------------------------

数据类型
表 3-3 列出 DB2 驱动程序支持的数据类型以及它们如何映射到 JDBC 数据类型。


表 3-3 DB2 数据类型 DB2 数据类型 JDBC 数据类型
Bigint1 BIGINT
Blob2 BLOB
Char CHAR
Char for Bit Data BINARY
Clob CLOB
日期 DATE
DBClob3 CLOB
Decimal DECIMAL
Double DOUBLE
Float FLOAT
Integer INTEGER
Long Varchar LONGVARCHAR
Long Varchar for Bit Data LONGVARBINARY
Numeric NUMERIC
Real REAL
Rowid4 VARBINARY
Smallint SMALLINT
时间 TIME
时间戳 TIMESTAMP
Varchar VARCHAR
Varchar for Bit Data VARBINARY
1 仅在用于 Linux/UNIX/Windows 的 DB2 v8.1 和 v 8.2 上支持。

2 仅在用于 Linux/UNIX/Windows 的 DB2 v8.1 和 v 8.2、用于z/OS 的 DB2 以及用于 iSeries 的 DB2 V5R2 和 V5R3 上支持(请参阅大型对象 (LOB) 支持)。

3 仅在用于 Linux/UNIX/Windows 的 DB2 v8.1 和 v 8.2、用于 z/OS 的DB2 7.x v8.1 和 v8.2 以及用于 iSeries 的 DB2 V5R2 和 V5R3 上支持(请参阅大型对象 (LOB) 支持)。

4 仅在用于 z/OS 的 DB2 以及用于 iSeries 的 DB2 V5R2 和 V5R3 上支持。



有关数据类型的详细信息,请参阅 GetTypeInfo。




--------------------------------------------------------------------------------

为目录方法使用非默认 Schema
在将 CatalogSchema 属性设置为默认 Schema 以外的 Schema 时,为确保目录方法能够正常运行,指定 Schema 中必须包含表 3-4 列出的目录表视图。需要哪些视图由 DB2 数据库决定。


表 3-4 DB2 目录表 数据库 目录表
用于 Linux/UNIX/Windows 的 DB2 SYSCAT.TABLES
SYSCAT.COLUMNS
SYSCAT.PROCEDURES
SYSCAT.PROCPARAMS
SYSCAT.COLAUTH
SYSCAT.TABAUTH
SYSCAT.KEYCOLUSE
SYSCAT.INDEXES
SYSCAT.INDEXCOLUSE
SYSCAT.REFERENCES
SYSCAT.SYSSCHEMATA
SYSCAT.TYPEMAPPINGS
SYSCAT.DBAUTH
用于 z/OS 的 DB2 SYSIBM.SYSTABCONST
SYSIBM.SYSTABLES
SYSIBM.SYSSYNONYMS
SYSIBM.SYSCOLUMNS
SYSIBM.SYSPROCEDURES
SYSIBM.SYSROUTINES
SYSIBM.SYSPARMS
SYSIBM.SYSCOLAUTH
SYSIBM.SYSTABAUTH
SYSIBM.SYSKEYS
SYSIBM.SYSINDEXES
SYSIBM.SYSRELS
SYSIBM.SYSFOREIGNKEYS
SYSIBM.SYSSCHEMAAUTH
SYSIBM.SYSDBAUTH
用于 iSeries 的 DB2 QSYS2.SYSCST
QSYS2.SYSKEYCST
QSYS2.SYSPROCS
QSYS2.SYSPARMS
QSYS2.SYSTABLES
QSYS2.SYSSYNONYMS
QSYS2.SYSCOLUMNS
QSYS2.SQLTABLEPRIVILEGES
QSYS2.SYSKEYS
QSYS2.SYSINDEXES
QSYS2.SYSREFCST





--------------------------------------------------------------------------------

SQL 转义序列
有关 DB2 驱动程序支持的 SQL 转义序列的信息,请参阅 JDBC 的 SQL 转义序列。




--------------------------------------------------------------------------------

隔离级别
DB2 驱动程序支持表 3-5 列出的隔离级别。如下所示,JDBC 隔离级别映射到相应的 DB2 事务隔离级别。默认隔离级别为 Read Committed。


表 3-5 支持的隔离级别 JDBC 隔离级别 DB2 隔离级别
无 No Commit1
Read Committed Cursor Stability
Read Uncommitted Uncommitted Read
Repeatable Read Read Stability
Serializable Repeatable Read
1 在未启用日志记录的 DB2 iSeries 版本上支持。






--------------------------------------------------------------------------------

使用可滚动游标
DB2 驱动程序支持对滚动 - 不敏感的结果集和可更新结果集。

注意: 如果 DB2 驱动程序不能支持请求的结果集类型或并发操作,它会自动将游标降级,并生成包含详细信息的一条或多条 SQLWarning。




--------------------------------------------------------------------------------

JTA 支持
要通过 JTA 和 DB2 驱动程序使用分布式事务,需要用于 Linux/UNIX/Windows 的 DB2 v8.1 或 v8.2。




--------------------------------------------------------------------------------

大型对象 (LOB) 支持
DB2 驱动程序支持在下列数据库中检索和更新 Blob:

用于 Linux/UNIX/Windows 的 DB2 v8.1 和 v8.2
用于 z/OS 的 DB2
用于 iSeries 的 DB2 V5R2 和 V5R3
DB2 驱动程序支持在支持的所有 DB2 数据库中检索和更新 Clob。DB2 驱动程序在下列 DB2 数据库中支持最大为 2 GB 的 Clob:

用于 Linux/UNIX/Windows 的 DB2 v8.1 和 v8.2
用于 z/OS 的 DB2
用于 iSeries 的 DB2 V5R2 和 V5R3
DB2 驱动程序支持在支持的其他 DB2 数据库中检索和更新最大为 32 KB 的 Clob。

DB2 驱动程序支持在下列数据库中检索和更新 DBClob:

用于 Linux/UNIX/Windows 的 DB2 v8.1 和 v8.2
用于 z/OS 的 DB2 7.x
用于 iSeries 的 DB2 V5R2 和 V5R3



--------------------------------------------------------------------------------

插入和更新批处理的性能变通方法
对于用于 Linux/UNIX/Windows 的 DB2 v8.1 和 v8.2、用于 z/OS 的 DB2 以及用于 iSeries 的 DB2,DB2 驱动程序使用本地 DB2 批处理机制。默认情况下,用于设置使用 PreparedStatement 执行的批处理参数值的方法必须与参数的关联列的数据库数据类型相匹配。

DB2 服务器不执行隐式数据转换,所以如果指定的参数值与列数据类型不匹配,会导致 DB2 服务器生成错误。例如,要在流或数组长度小于 32 KB 时使用流或字节数组设置 Blob 参数的值,必须使用 setObject() 方法并将目标 JDBC 类型指定为 BLOB;不能使用 setBinaryStream() 或 setBytes() 方法。

要摆脱方法类型的限制,请将 BatchPerformanceWorkaround 属性设置为 true。例如,可使用 setBinaryStream() 或 setBytes() 方法设置 Blob 参数的值,无论流或数组的长度是多少;不过,可能不会按照指定参数的顺序执行参数设置。

注意: 默认情况下,在管理控制台中创建数据源时,管理控制台会将 BatchPeformanceWorkaround 连接属性设置为 true。
注意: 如果将数据源用作用于 DB2 的 WebLogic Type 4 JDBC 驱动程序的 JMS JDBC 存储,必须将 BatchPerformanceWorkaround 属性设置为 true。




--------------------------------------------------------------------------------

参数元数据支持
DB2 驱动程序支持返回参数元数据,如本部分中所述。

Insert 和 Update 语句
对于下列 DB2 数据库,DB2 驱动程序支持为所有类型的 SQL 语句返回参数元数据:

用于 Linux/UNIX/Windows 的 DB2 v8.1 和 v8.2
用于 z/OS 的 DB2
用于 iSeries 的 DB2 V5R2 和 V5R3
对于其他所有支持的 DB2 数据库,DB2 驱动程序支持为下列形式的 Insert 和 Update 语句返回参数元数据:

INSERT INTO foo VALUES (?, ?, ?)
INSERT INTO foo (col1, col2, col3) VALUES (?, ?, ?)
UPDATE foo SET col1=?, col2=?, col3=? WHERE col1 operator ? [{AND | OR} col2 operator ?]
其中,operator 是下列任一 SQL 运算符:=、<、>、<=、>= 和 <>。

Select 语句
对于下列 DB2 数据库,DB2 驱动程序支持为所有类型的 SQL 语句返回参数元数据:

用于 Linux/UNIX/Windows 的 DB2 v8.1 和 v8.2
用于 z/OS 的 DB2
用于 iSeries 的 DB2 V5R2 和 V5R3
对于其他所有支持的 DB2 数据库,DB2 驱动程序支持为 ANSI SQL 92 入门级谓词(如 COMPARISON、BETWEEN、IN、LIKE 和 EXISTS 谓词结构)中包含参数的 Select 语句返回参数元数据。有关详细语法,请参阅 ANSI SQL 参考文档。

如果满足下列条件之一,就可以为 Select 语句返回参数元数据:

该语句包含一个谓词值表达式,此表达式可在相关 FROM 子句中的源表进行定位。例如:
SELECT * FROM foo WHERE bar > ?在本例中,可在表“foo”中定位值表达式“bar”,以确定参数的相应元数据。
语句包含以嵌套查询形式出现的谓词值表达式部分。嵌套查询的元数据必须描述单个列。例如:
SELECT * FROM foo WHERE (SELECT x FROM y WHERE z = 1) < ?下列 Select 语句显示更多可为其返回参数元数据的示例:

SELECT col1, col2 FROM foo WHERE col1 = ? and col2 > ? SELECT ... WHERE colname = (SELECT col2 FROM t2 WHERE col3 = ?) SELECT ... WHERE colname LIKE ? SELECT ... WHERE colname BETWEEN ? 和 ? SELECT ... WHERE colname IN (?, ?, ?) SELECT ... WHERE EXISTS(SELECT ... FROM T2 WHERE col1 < ?)支持包含 GROUP BY、HAVING 或 ORDER BY 语句的 WHERE 子句中的 ANSI SQL 92 入门级谓词。例如:

SELECT * FROM t1 WHERE col = ? ORDER BY 1支持连接。例如:

SELECT * FROM t1,t2 WHERE t1.col1 = ?支持完全限定名称和别名。例如:

SELECT a, b, c, d FROM T1 AS A, T2 AS B WHERE A.a = ? and B.b = ?"


--------------------------------------------------------------------------------

ResultSet 元数据支持
如果您的应用程序需要表名信息,则 DB2 驱动程序可在 Select 语句的 ResultSet 元数据中返回表名信息。通过将 ResultSetMetaDataOptions 属性设置为 1,DB2 驱动程序可执行其他处理,以便在调用 ResultSetMetaData.getTableName() 方法时确定结果集中每列的正确表名。否则,getTableName() 方法可能对结果集中的每一列都返回空字符串。

DB2 驱动程序返回的表名信息取决于结果集中各列是否映射到数据库表中的列。对于结果集中映射到数据库表中列的每一列,DB2 驱动程序都会返回与该列关联的表名。对于结果集中没有映射到表列的每一列(例如,聚合和字面值),DB2 驱动程序会返回空字符串。

针对其返回 ResultSet 元数据的 Select 语句可能包含别名、连接和完全限定名。下列查询是 Select 语句示例,ResultSetMetaData.getTableName() 方法针对这些语句返回与 Select 列表中的各列相对应的正确表名:

SELECT id, name FROM Employee SELECT E.id, E.name FROM Employee E SELECT E.id, E.name AS EmployeeName FROM Employee E SELECT E.id, E.name, I.location, I.phone FROM Employee E, EmployeeInfo I WHERE E.id = I.id SELECT id, name, location, phone FROM Employee, EmployeeInfo WHERE id = empId SELECT Employee.id, Employee.name, EmployeeInfo.location, EmployeeInfo.phone FROM Employee, EmployeeInfo WHERE Employee.id = EmployeeInfo.id驱动程序为生成的列返回的表名称是空字符串。以下查询是 Select 语句的一个示例,返回包含生成列(“upper”列)的结果集。

SELECT E.id, E.name as EmployeeName, {fn UCASE(E.name)} AS upper FROM Employee E如果驱动程序能够确定 Schema 名和目录名信息,则在调用 ResultSetMetaData.getSchemaName() 和 ResultSetMetaData.getCatalogName() 方法时,DB2 驱动程序还可以返回这些信息。例如,对于以下语句,DB2 驱动程序返回目录名“test”、Schema 名“test1”和表名“foo”:

SELECT * FROM test.test1.foo 只有调用 ResultSetMetaData.getTableName()、ResultSetMetaData.getSchemaName() 或 ResultSetMetaData.getCatalogName() 方法时,才执行要求返回表名称、schema 名称和目录名称信息的附加处理。




--------------------------------------------------------------------------------

Rowset 支持
DB2 驱动程序支持 RowSet 接口的所有 JSR 114 实现,包括:

CachedRowSets
FilteredRowSets
WebRowSets
JoinRowSets
JDBCRowSets
有关 JSR 114 的详细信息,请参阅 http://www.jcp.org/en/jsr/detail?id=114。




--------------------------------------------------------------------------------

自动生成关键字支持
DB2 驱动程序支持检索自动生成关键字的值。DB2 驱动程序返回的自动生成关键字的值是自动增加列的值。

返回这些值的方式取决于是否使用包含参数的 Insert 语句:

在使用不包含任何参数的 Insert 语句时,DB2 驱动程序支持 Statement.execute 和 Statement.executeUpdate 方法的以下形式,以通知驱动程序返回自动生成的密钥的值:
Statement.execute (String sql, int autoGeneratedKeys)
Statement.executeUpdate (String sql, int autoGeneratedKeys)
在使用包含参数的 Insert 语句时,DB2 驱动程序支持 Connection.prepareStatement 方法的以下形式,以通知驱动程序返回自动生成的密钥的值:
Connection.prepareStatement (String sql, int autoGeneratedKeys)
应用程序使用 Statement.getGeneratedKeys 方法提取驱动程序生成的关键字的值。




--------------------------------------------------------------------------------

已知问题
由于 DB2 服务器中的缺陷,如果使用的驱动程序修补程序的级别等于或大于上述修补程序级别,则连接服务器版本早于 DB2 v8 FixPak 11 的 UNIX、Windows 或 Linux 上的 DB2 UDB 时可能会出现问题。如果出现连接问题,可能需要在配置中包含下列驱动程序属性:

ExtendedOptions=ServerReleaseLevel=SQL08020使用下表,可以提供关于何时使用 ServerReleaseLevel 的指导:


表 3-6 ServerReleaseLevel=SQL08020 的使用准则 服务器版本 驱动程序版本
低于 3.4.72 3.4.72 或更高 低于 3.5.14 3.5.14 或更高
低于 DB2 v8 FP11 不可用/不需要 可能需要使用 不可用/不需要 可能需要使用
DB2 v8 FP11 或更高 不可用/不需要 不使用 不可用/不需要 不使用


有关详细信息,请参阅 IBM 的支持和下载站点中的 DB2 UDB Version 8.1 FixPak 11 (also known as Version 8.2 FixPak 4)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值