JDBC 介体提供的查询

SDO 客户机可以提供 JDBC 数据介体服务 (DMS),方法是使用 SELECT 语句替换从 DMS 元数据中生成的语句。

当 SDO 客户机实例化 DMS 时,DMS 使用定义元数据来生成基本 SELECT 语句。提交该查询可让您指定参数标记;因此,可对填充 dataGraph 的客户机数据具有更强的控制能力。对于客户机提供的查询,使用标准 SQL SELECT 字符串。

通过提供的查询和生成的查询,会为每个 DataObject 自动生成 UPDATE、INSERT 和 DELETE 语句。当介体将对 Datagraph 作出的更改提交回数据库时,应用这些语句。

提供的查询的参数 DataObject

客户机可以使用参数 DataObject 来向 SQL SELECT 查询提供自变量。参数 DataObject 是一个数据对象,但不是任何 Datagraph 的一部分。当客户机请求参数 DataObject 时,由 JDBC DMS 构造该 DataObject。根据给定介体的查询创建提供的查询的参数 DataObject。查询中的每个参数都被赋予一个名称,例如,arg0、arg1、…、argX

因为参数 DataObject 是一个 DataObject,所以您可以使用属性名或索引值设置其参数。可以通过属性的 argX 名称或者通过与该参数相关联的编号(0、1、…、X)来引用属性。例如,查询为“SELECT CUSTFIRSTNAME WHERE CUSTSTATE = ? AND CUSTZIP = ?”。此提供的查询包含两个参数。第一个参数与 CUSTSTATE 相对应,并且可以使用字符串“arg0”或索引 0 进行设置。第二个参数与 CUSTZIP 相对应,并且可以使用字符串“arg1”或索引 1 进行设置。以下是如何设置这些参数的样本代码。此代码假设您通过元数据和上述提供的查询设置了元数据和介体。使用索引值方法的话,可以按如下所示编码:

DataObject parameters = mediator.getParameterDataObject();
parameter.setString(0, "NY");
parameter.setInt(1, 12345);
DataObject graph = mediator.getGraph(parameters);

使用属性名方法,可以按如下所示编码:

DataObject parameters = mediator.getParameterDataObject();
parameters.setString("arg0", "NY");
parameters.setInt("arg1", 12345);
DataObject graph = mediator.getGraph(parameters);

两者结果相同。

限制

Oracle 或 Informix® 上不完全支持 JDBC DMS 生成的 SQL SELECT 查询。这是因为介体利用 JDBC 2.0 中 ResultSetMetaData 接口并且要求完全实现。Oracle、Informix、DB2/390 以及 Sybase 的旧的支持版本不能完全实现 ResultSetMetaData 接口。 提供的 SELECT 方法仍可由这些数据库使用,但有一个局限性:在所有的表中,元数据中的列名必须唯一。 如果 SELECT 语句返回的名称多次出现在元数据中的列,会发生 InvalidMetadataException。例如,如果 Customer 表和 Order 表都包含名为“ID”的列,那么这种情况无效并会导致问题。修正此问题的方法是更改数据库中至少一列匹配的列的名称以更好地将这两列彼此区别开。对于 Customer 表,可以将列名更改为“CUSTID”,如示例中所示。可以将 Order 表的列名更改为“ORDERID”。如果您更改了 Customer 表的列名,那么不必更改 Order 表的列名,但为了一致性,同时更改 Order 表也是一个不错的主意。


指示主题类型的图标 参考主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rdat_sdosquery
文件名:rdat_sdosquery.html