JDBC 介体异常

JDBC 介体异常是数据库报告的表面错误,或者指示在尝试实例化 DMS 时使用无效的元数据。

异常

Mediator 异常是所有数据介体服务的根本异常,特别的是,JDBCMediator 异常是 JDBC DMS 的根本异常。

当数据库报告错误时,发生 DB 异常。以下几种情况下都会发生此异常:
  • 当被使用的连接已将 AutoCommit 属性设置为 true,但是 JDBC DMS 正在控制事务并且需要将它设置为 false 时
  • 当尝试使用不受支持的数据库时
  • 当提交或回滚期间发生其他后端数据库错误时。

当执行 applyChanges() 导致数据冲突时会发生乐观并发控制 (OCC) 异常。当发生该异常时,该异常包含最初的行值、当前的行值和尝试的行值。这些值用于帮助从错误中恢复。

当为创建的 JDBC DMS 提供了无效的元数据,会发生 InvalidMetadata 异常。当查询需要未在元数据中定义的表或列,或者 Oracle、Informix® 以及受支持的较低版本 Sybase 数据库中不同表的列名称相同时,会发生此异常。

示例:强制 OCC 数据冲突和 JDBC 介体异常。以下示例强制产生一个冲突以演示检测并显示因此而发生的异常。

// This example assumes that a mediator has already 
// been created and the first name in the list is Sam.  
// It also assumes that the Customer table has an OCC 
// column and the metadata has set this column to be 
// the collision column.

DataObject graph1 = mediator.getGraph();
DataObject graph2 = mediator.getGraph();
  
DataObject customer1 = (DataObject)graph1.getList("CUSTOMER").get(0);
customer1.set("CUSTFIRSTNAME", "Bubba");
  
DataObject customer2 = (DataObject)graph2.getList("CUSTOMER").get(0);
customer2.set("BOWLERFIRSTNAME", "Slim");
 
mediator.applyChanges(graph2);
  
try
{
 mediator.applyChanges(graph1);  
} 
catch (OCCException e) 
{
// Since graph1 was obtained before graph2 and 
// graph2 has already been submitted, trying to 
// apply the same changes to graph1 causes 
// this OCC Exception.

assertEquals("Sam", e.getOriginalDO(). getString("CUSTFIRSTNAME")); 
assertEquals("Bubba", e.getChangedDO(). getString("CUSTFIRSTNAME")); 
assertEquals("Slim", e.getDatabaseDO(). getString("CUSTFIRSTNAME")); 
}

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



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