应用程序开发:客户机应用程序编程

8 8 8

OleDbReportIsLongForLongTypes CLI/ODBC 配置关键字

8
8
关键字描述:
8
使用 DBCOLUMNFLAGS_ISLONG 来使 OLE DB 标志 LONG 数据类型。 8
8
db2cli.ini 关键字语法:
8
OleDbReportIsLongForLongTypes = 0 | 1 8
8
等价语句属性:
8
SQL_ATTR_REPORT_ISLONG_FOR_LONGTYPES_OLEDB 8
8
缺省设置:
8
LONG 类型(LONG VARCHAR、LONG VARCHAR FOR BIT DATA、LONG VARGRAPHIC 和 LONG VARGRAPHIC FOR BIT DATA)没有设置 DBCOLUMNFLAGS_ISLONG 标志,这可能会导致在 WHERE 子句中使用这些列。 8
8
使用说明:
8
  8
8
8

OLE DB 的客户机游标引擎和 OLE DB .NET 数据提供程序的 CommandBuilder 根据 IBM DB2 OLE DB 提供程序提供的列信息来生成更新和删除语句。如果生成的语句在 WHERE 子句中包含 LONG 类型,则该语句将失败,这是因为不能在具有等号运算符的搜索中使用 LONG 类型。将关键字 8OleDbReportIsLongForLongTypes 设置为 1 将使 IBM DB2 OLE DB 提供程序报告设置了 DBCOLUMNFLAGS_ISLONG 标志的 8LONG 类型(LONG VARCHAR、LONG VARCHAR FOR BIT DATA、LONG VARGRAPHIC 和 LONG VARGRAPHIC FOR BIT DATA)。这可防止在 WHERE 子句中使用 LONG 列。

8 8 8

OleDbSQLColumnsSortByOrdinal CLI/ODBC 配置关键字

8
8
关键字描述:
8
使 OLE DB 的 IDBSchemaRowset::GetRowset(DBSCHEMA_COLUMNS) 返回按 ORDINAL_POSITION 列排序的行集。 8
8
db2cli.ini 关键字语法:
8
OleDbSQLColumnsSortByOrdinal = 0 | 1 8
8
等价语句属性:
8
SQL_ATTR_SQLCOLUMNS_SORT_BY_ORDINAL_OLEDB 8
8
缺省设置:
8
IDBSchemaRowset::GetRowset(DBSCHEMA_COLUMNS) 返回按 TABLE_CATALOG、TABLE_SCHEMA、TABLE_NAME 和 COLUMN_NAME 列排序的行集。 8
8
使用说明:
8
  8
8
8

Microsoft OLE DB 规范要求 IDBSchemaRowset::GetRowset(DBSCHEMA_COLUMNS) 返回按 8TABLE_CATALOG、TABLE_SCHEMA、TABLE_NAME 和 COLUMN_NAME 列排序的行集。IBM DB2 OLE DB 提供程序遵守该规范。但是,通常已经编写了使用 Microsoft ODBC 桥提供程序(MSDASQL)的应用程序来获取按 8ORDINAL_POSITION 排序的行集。将 OleDbSQLColumnsSortByOrdinal 关键字设置为 1 将使提供程序返回按 ORDINAL_POSITION 排序的行集。

8 8 8

IBM DB2 OLE DB 提供程序的 DB2 数据源属性组

8

IBM DB2 OLE DB 提供程序已经添加了新的属性组:DB2 数据源。DB2 数据源的属性集为 DBPROPSET_DB2DATASOURCE。

8

属性集的 GUID 为 {0x8a80412a,0x7d94,0x4fec,{0x87,0x3e,0x6c,0xd1,0xcd,0x42,0x0d,0xcd}}

8

DBPROPSET_DB2DATASOURCE 具有三种属性:

8 8
8DB2PROP_REPORTISLONGFORLONGTYPES 8

8
#define DB2PROP_REPORTISLONGFORLONGTYPES 4
8属性组:DB2 数据源
8属性集:DB2PROPSET_DATASOURCE
8类型:VT_BOOL
8典型 R/W:R/W
8描述:报告 Long 类型的 IsLong
8

OLE DB 的客户机游标引擎和 OLE DB .NET 数据提供程序的 CommandBuilder 根据 IBM DB2 OLE DB 提供程序提供的列信息来生成更新和删除语句。如果生成的语句在 WHERE 子句中包含 LONG 类型,则该语句将失败,这是因为不能在具有等号运算符的搜索中使用 LONG 类型。

8 8888888888888888888
表 17. DB2PROP_REPORTISLONGFORLONGTYPES 值
含义
VARIANT_TRUE 将使 IBM DB2 OLE DB 提供程序报告设置了 DBCOLUMNFLAGS_ISLONG 标志的 8LONG 类型(LONG VARCHAR、LONG VARCHAR FOR BIT DATA、LONG VARGRAPHIC 和 LONG VARGRAPHIC FOR BIT DATA)。这可防止在 WHERE 子句中使用 LONG 列。
VARIANT_FALSE 没有为 LONG VARCHAR、LONG VARCHAR FOR BIT DATA、LONG VARGRAPHIC 和 LONG VARGRAPHIC FOR BIT DATA 设置 DBCOLUMNFLAGS_ISLONG。这是缺省情况。
8
8DB2PROP_RETURNCHARASWCHAR 8

8
#define DB2PROP_RETURNCHARASWCHAR 2
8属性组:DB2 数据源
8属性集:DB2PROPSET_DATASOURCE
8类型:VT_BOOL
8典型 R/W:R/W
8描述:作为 WChar 来返回 Char
8

8 8888888888888888888
表 18. DB2PROP_RETURNCHARASWCHAR 值
含义
VARIANT_TRUE OLE DB 将类型为 CHAR、VARCHAR、LONG VARCHAR 或 CLOB 的列描述为 DBTYPE_WSTR。ISequentialStream 中隐含的数据的代码页将为 UCS-2。这是缺省值。
VARIANT_FALSE OLE DB 将类型为 CHAR、VARCHAR、LONG VARCHAR 或 CLOB 的列描述为 DBTYPE_STR。ISequentialStream 中隐含的数据的代码页将为客户机的本地代码页。
8
8DB2PROP_SORTBYORDINAL 8

8
#define DB2PROP_SORTBYORDINAL 3
8属性组:DB2 数据源
8属性集:DB2PROPSET_DATASOURCE
8类型:VT_BOOL
8典型 R/W:R/W
8描述:按序数排序
8

Microsoft OLE DB 规范要求 IDBSchemaRowset::GetRowset(DBSCHEMA_COLUMNS) 返回按 8TABLE_CATALOG、TABLE_SCHEMA、TABLE_NAME 和 COLUMN_NAME 列排序的行集。IBM DB2 OLE DB 提供程序遵守该规范。但是,通常已经编写了使用 Microsoft ODBC 桥提供程序(MSDASQL)的应用程序来获取按 8ORDINAL_POSITION 排序的行集。

8 8888888888888888888
表 19. DB2PROP_SORTBYORDINAL 值
含义
VARIANT_TRUE 将使提供程序返回按 ORDINAL_POSITION 排序的行集。
VARIANT_FALSE 将使提供程序返回按 TABLE_CATALOG、TABLE_SCHEMA、TABLE_NAME 和 COLUMN_NAME 排序的行集。这是缺省值。
8 8 8

DB2Binder 语法图中不正确的 URL 语法

8

在“安装 DB2 通用 JDBC 驱动程序”这一主题中,DB2Binder 语法图不正确地定义了 DB2 通用 JDBC 驱动程序的 URL 语法。下图中显示了 DB2Binder 的 URL 语法的正确表示:

8
8DB2Binder 语法
8 8
阅读语法图跳过直观语法图8>>-java--com.ibm.db2.jcc.DB2Binder------------------------------>
8
8>---url jdbc:db2://server-+---------+-/database----------------->
8                          '-:--port-'
8
8>---user user-ID---password password--+---------------+--------->
8                                      '--size integer-'
8
8>--+-----------------------------+------------------------------>
8   '--collection collection-name-'
8
8>--+-------------------------------+--+-------+----------------><
8   |              .-,------------. |  '--help-'
8   |              V              | |
8   '--tracelevel ---trace-option-+-'
8
8
8 8
8 8 8

重新路由 DB2 通用 JDBC 驱动程序客户机

8

DB2 Universal Database(DB2 通用数据库,UDB)Linux 版、UNIX 版、 版和 Windows 版中的自动客户机重新路由功能允许客户机应用程序从与服务器的通信断开恢复,以便它们能继续处理最小的中断。

8

每当服务器锁定时,连接至该服务器的每个客户机都会接收到一个通信错误,它会终止连接并导致应用程序错误。如果可用性非常重要,则应具有冗余设置或故障转移支持。(故障转移是在一个服务器失效时另一个服务器接管操作的能力。)在任一情况下,DB2 通用 JDBC 驱动程序客户机将尝试重新建立与新服务器或原始服务器的连接,这可能在故障转移节点上运行。重新建立连接后, 8应用程序将接收到 SQLException 异常,通知它事务失败,但是应用程序可以继续进行下一事务。

8
8限制 8

8
8
8过程 8

在数据库管理员在服务器实例中的特定数据库中指定备用服务器位置之后,主服务器位置和备用服务器位置将在连接时返回至客户机。DB2 通用 JDBC 驱动程序创建可引用对象 8DB2ClientRerouteServerList 的实例,并将该实例存储在它的瞬态内存中。如果通信中断,DB2 通用 JDBC 驱动程序将尝试使用从服务器返回的服务器信息来重新建立连接。

8

clientRerouteServerListJNDIName 数据源属性在客户机上提供附加客户机重新路由支持;clientRerouteServerListJNDIName 具有两个功能:

8 8

clientRerouteServerListJNDIName 标识对备用服务器信息的 8JNDI 资源库中的 DB2ClientRerouteServerList 实例的 JNDI 引用。在成功连接至主服务器之后, 8clientRerouteServerListJNDIName 提供的备用服务器信息将被来自该服务器的信息覆盖。如果定义了 8clientRerouteServerListJNDIName 属性,则在故障转移之后,DB2 通用 JDBC 驱动程序将尝试把更新后的信息传播至 JNDI 存储。如果指定了 8clientRerouteServerListJNDIName,则将把在 DB2ClientRerouteServerList 中指定的主服务器信息用于连接。如果未指定主服务器,则将使用在数据源上指定的 serverName 信息。

8

DB2ClientRerouteServerList 是具有以下四种属性的可序列化 Java bean:

8

提供了用于访问这些属性的 Getter 和 setter 方法。DB2ClientRerouteServerList 类的定义为如下所示:

8
package com.ibm.db2.jcc;
8public class DB2ClientRerouteServerList 
8  implements java.io.Serializable,
8  javax.naming.Referenceable
8{
8  public String[] alternateServerName;
8  public synchronized void 
8    setAlternateServerName(String[] alternateServer);
8  public String[] getAlternateServerName();
8  public int[] alternatePortNumber;
8  public synchronized void 
8    setAlternatePortNumber(int[] alternatePortNumberList);
8  public int[] getAlternatePortNumber();
8  
8  public synchronized void 
8    setPrimaryServerName (String primaryServerName);
8  public String getPrimaryServerName ();
8  public synchronized void setPrimaryPortNumber (int primaryPortNumber)
8  public int getPrimaryPortNumber (); 
8}
8

新建立的故障转移连接是使用原始数据源属性配置的,但是服务器名称和端口号除外。此外,在原始连接期间修改的任何 DB2 UDB 专用寄存器将在故障转移连接中使用 DB2 通用 JDBC 驱动程序来重新建立。

8

在发生通信故障时,DB2 通用 JDBC 驱动程序首先尝试恢复至主服务器。如果恢复至主服务器失败,驱动程序就会尝试连接至备用位置(故障转移)。重新建立连接之后,该驱动程序会向应用程序抛出 8java.sql.SQLException 及 SQLCODE -4498,以便对应用程序指示已经自动与备用服务器重新建立了连接。于是该应用程序重试该事务。

8
8使 DB2ClientRerouteServerList 保持持久的过程 8

要设置存储器以使 DB2ClientRerouteServerList 保持持久,遵循下列步骤:

8
    8
  1. 创建 DB2ClientRerouteServerList 的实例并将该实例绑定至 JNDI 注册表。例如: 8
    // Create a starting context for naming operations
    8InitialContext registry = new InitialContext();
    8// Create a DB2ClientRerouteServerList object
    8DB2ClientRerouteServerList address=new DB2ClientRerouteServerList();
    8
    8// Set the port number and server name for the primary server
    8address.setPrimaryPortNumber(50000);
    8address.setPrimaryServerName("mvs1.sj.ibm.com");
    8
    8// Set the port number and server name for the alternate server
    8int[] port = {50002};
    8String[] server = {"mvs3.sj.ibm.com"};
    8address.setAlternatePortNumber(port);
    8address.setAlternateServerName(server);
    8    
    8registry.rebind("serverList", address);
    
  2. 8
  3. 将 DB2ClientRerouteServerList 对象的 JNDI 名称指定给数据源属性 clientRerouteServerListJNDIName。例如: 8
    datasource.setClientRerouteServerListJNDIName("serverList");
7 7 7

定制 DB2 通用 JDBC 驱动程序配置属性

7

DB2 通用 JDBC 驱动程序配置属性允许您设置具有驱动程序范围作用域的属性值。这些设置将应用于各个应用程序和数据源实例。可以更改这些设置而不必更改应用程序源代码或数据源特征。

7

每个 DB2 通用 JDBC 驱动程序配置属性设置使用以下格式:

7
property=value
7

如果配置属性以 db2.jcc.override 开头,则该配置属性适用于所有连接并将覆盖任何具有相同属性名的连接或数据源属性。如果配置属性以 db2.jcc 7或 db2.jcc.default 开头,则配置属性值将为缺省值。连接或数据源属性设置将覆盖该值。

7
7过程 7

要设置配置属性:

7

7 7

可设置下列 DB2 通用 JDBC 驱动程序配置属性。所有属性都是可选的。

7
7
db2.jcc.override.traceFile
7
对 Java 驱动程序代码启用 DB2 通用 JDBC 驱动程序跟踪,并指定跟踪文件名称所基于的名称。 7 7

对 db2.jcc.override.traceFile 属性值指定全限定文件名。

7

db2.jcc.override.traceFile 属性将覆盖连接或数据源对象的跟踪文件属性。

7

例如,对 7db2.jcc.override.traceFile 指定以下设置将允许跟踪 DB2 通用 JDBC 驱动程序 Java 代码并记录至名为 /SYSTEM/tmp/jdbctrace 的文件:

7
db2.jcc.override.traceFile=/SYSTEM/tmp/jdbctrace

应在 IBM 软件支持机构的指导下设置跟踪属性。

7
7
db2.jcc.sqljUncustomizedWarningOrException
7
指定 DB2 通用 JDBC 驱动程序在未定制 SQLJ 应用程序运行时所执行的操作。db2.jcc.sqljUncustomizedWarningOrException 可能具有下列值: 7
7
0
7
DB2 通用 JDBC 驱动程序不会在未定制 SQLJ 应用程序运行时生成警告或异常。这是缺省值。 7
7
1
7
DB2 通用 JDBC 驱动程序将在未定制 SQLJ 应用程序运行时生成警告。 7
7
2
7
DB2 通用 JDBC 驱动程序将在未定制 SQLJ 应用程序运行时生成异常。 7
7
7
7
7 7 7

db2secFreeToken 函数已除去

7

db2secFreeToken 函数(标记拥有的可用内存)不再是 db2secGssapiServerAuthFunctions_1 用户认证插件 API 的一部分。

8 8 8

仔细部署定制安全性插件

8

如果安全性插件的部署未经过充分编码、复查和测试,则 DB2 Universal Database(DB2 通用数据库,UDB)安装的完整性会受到损坏。DB2 UDB 对于许多常见类型的故障采取了一些预防措施,但是,它并不能保证在部署用户编写的安全性插件时具有完整的完整性。

7 7 7

安全性插件

7

如果要使用您自己的定制安全性插件,可在通过 CLP 发出的连接语句或动态 SQL 语句上使用最多 255 个字符的用户标识。

7 7 7

安全性插件 API

7

对于 db2secGetGroupsForUser、db2secValidatePassword 和 db2secGetAuthIDs API,输入参数 7dbname 可为空,而其对应长度输入参数 dbnamelen 将设置为 0。

7 7 7

安全性插件命名约定(Linux 和 UNIX

7

在所有 Linux 和 UNIX 平台上,现在接受将 .so 作为用户编写的安全性插件库的文件扩展名。

7

在 AIX 上,安全性插件库可以具有扩展名 .a.so。如果插件库同时存在两个版本,则使用 .a 版本。

7

对于 HP-UX on PA-RISC,安全性插件库可以具有扩展名 .sl 7.so。如果插件库同时存在两个版本,则使用 .sl 版本。

7

在所有其它 Linux 和 UNIX 平台上,.so 是安全性插件库唯一支持的文件扩展名。

7 7 7

安全性插件库的限制

7

在 AIX 上,安全性插件库可以具有文件扩展名 .a.so。用于装入插件库的机制取决于使用哪个扩展名:

7
7
具有文件扩展名 .a 的插件库
7
具有文件扩展名 .a 的插件库被假定为包含共享对象成员的归档。这些成员必须命名为 7shr.o(32 位)或 shr64.o(64 位)。单个归档可同时包含 32 位和 64 位成员,这允许它在两种类型的平台上进行部署。 7

例如,要构建 732 位归档式插件库:

7
  xlc_r -qmkshrobj -o shr.o MyPlugin.c -bE:MyPlugin.exp
7  ar rv MyPlugin.a shr.o
7
7
具有文件扩展名 .so 的插件库
7
具有文件扩展名 .so 的插件库被假定为动态可装入共享对象。这种对象是 32 位还是 64 位取决于在构建时使用的编译器和链接程序选项。例如,要构建 732 位插件库: 7
  xlc_r -qmkshrobj -o MyPlugin.so MyPlugin.c -bE:MyPlugin.exp
7
7
7

在除了 AIX 之外的所有平台上,安全性插件库总是被假定为动态可装入的共享对象。

8 8 8

GSS-API 安全性插件不支持多个流认证

8

GSS-API 认证仅限于使一个令牌从客户机流至服务器和使一个令牌从服务器流至客户机。这些令牌是从客户机上的 gss_init_sec_context() 和服务器上的 gss_accept_sec_context() 获得的。尝试更多流的 GSS-API 插件将生成安全性插件意外错误,从而导致连接失败。

8 8 8

GSS-API 安全性插件不支持消息加密和签名

8

消息加密和签名在 GSS-API 安全性插件中不可用。

7 7 7

独立应用程序中的事务的隐式结束

7

所有应用程序终止(正常和异常)隐式回滚未完成的工作单元,不管操作系统如何都是如此。

8 8 8

分布式事务支持

8

在 DB2 Universal Database(DB2 通用数据库,UDB)版本 8.2 的“新增内容”文档中,『DB2 通用 JDBC 驱动程序改进』一节中的分布式事务支持信息中具有不正确的信息。这一节的最后一句不正确。正确信息应为:

8

从版本 8.2 开始,DB2 UDB 支持符合 XA 规范的分布式事务处理。此支持实现 Java 2 Platform, Enterprise Edition(J2EE)Java 事务服务(JTS)和 Java 事务 API(JTA)规范。

[ 页的顶部 |上一页 | 下一页 | 目录 ]