快速业务通道

Java 6 RowSet使用完全剖析 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
ges() 会抛出 SyncProviderException,由此我们可以捕获产生冲突的原因并手动进行解决。

清单 7. 冲突

ResultSet rs = stmt.executeQuery(DBCreator.SQL_SELECT_CUSTOMERS); CachedRowSet cachedRS = new CachedRowSetImpl(); cachedRS.populate(rs); cachedRS.setUrl(DBCreator.DERBY_URL); // 修改数据库中的数据 stmt.executeUpdate("UPDATE CUSTOMERS SET NAME = ''Terry'' WHERE ID = 1"); // 在 CachedRowSet 中更新同一行 cachedRS.absolute(1); cachedRS.updateString(3, "Tom is not VIP"); cachedRS.updateRow(); SyncResolver resolver = null; try {   cachedRS.acceptChanges(); } catch (SyncProviderException e) {   resolver = e.getSyncResolver(); } while (resolver.nextConflict()) {   System.out.println(resolver.getStatus()); }

我们首先填充 cachedRS,然后在数据库中直接修改 ID 为 1 的行,将 NAME 字段设为 "Terry",同时用 cachedRS 修改 ID 为 1 的行的 REMARK 字段,最后使用 acceptChanges 跟数据库进行同步。此时 cachedRS 中记录的原始值与数据库中的值不一致,从而产生冲突,抛出 SyncProviderException,数据也会更新失败。接下来我们通过 SyncProviderException 得到 SyncResolver 实例并遍历了产生的所有冲突。

SyncResolver 继承了 RowSet 接口,我们可以像使用一般 RowSet 一样操作它。SyncResolver 的实例拥有与正在同步的 RowSet 相同的行数和列数。使用 nextConflict() 和 previousConflict() 可以遍历所有产生的冲突,getStatus() 可以获得冲突的类型。在 SyncResolve 中定义了四种类型,分别是:DELETE_ROW_CONFLICT,INSERT_ROW_CONFLICT,NO_ROW_CONFLICT,UPDATE_ROW_CONFLICT。上例中产生的是 UPDATE_ROW_CONFLICT。

注:目前 Sun JDK 对 SyncResolver 的支持非常有限,只实现了 SyncResolver 接口中定义的方法,调用从 RowSet 接口继承的方法都会抛出 UnsupportedOperationException 异常;getConflictValue() 返回都是 null。

事件监听

一个监听器需要实现 RowSetListener 接口。RowSetListener 支持三种事件监听:cursor moved、row changed 和 rowSet changed。假定 Listener 实现了 RowSetListener 接口,看示例代码。

清单 8. 注册事件监听器

Listener listener = new Listener(); cachedRS.addRowSetListener(listener); updateOnRowSet(cachedRS); cachedRS.removeRowSetListener(listener);

updateOnRowSet() 所做的操作就是将游标移到第一行,更新,再同步回数据库。在这个方法中,依次触发了 Listener 的三个事件。下表列出了 CachedRowSet 中会触发监听器的所有方法。

表 4. CachedRowSet 中会触发监听器的方法

cursor moved row changed rowSet changed
absolute()
relative()
next()
previous()
first()
last()
beforeFirst()
afterLast()
updateRow()
deleteRow()
insertRow()
undoDelete()
undoUpdate()
undoInsert()
populate()
acceptChanges()
acceptChanges(Connection)
execute()
execute(Connection)
nextPage()
previousPage()
restoreOriginal()
release()

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号