将对此 cachedrowset 对象所做的行更新、插入以及删除更改传播到底层数据源。
此方法调用此 cachedrowset 对象的 writer 在后台完成工作。标准的 cachedrowset 实现应该使用 syncfactory 单件来获得 syncprovider 实例,以提供一个 rowsetwriter 对象 (writer)。该 writer 会尝试将在此 cachedrowset 对象中所做的更改传播回数据源。
方法 acceptchanges 成功执行后,除了将更改写入数据源外,它还使当前行中的值成为原始行中的值。
根据所用 syncprovider 实现的同步级别,writer 将原始值与数据源中的值进行比较,以检查是否有冲突。如果有冲突,则 rioptimisticprovider 实现可能会抛出 syncproviderexception 并且不向数据源中写入任何内容。
应用程序可以选择捕获 syncproviderexception 对象并获取它所包含的 syncresolver 对象。syncresolver 对象逐行列出冲突,并在数据源上设置锁定,以避免在解决当前冲突的同时出现更多冲突。此外,对于每个冲突,它还提供了各种方法来检查该冲突和设置在数据源中应该保持不变的值。解决所有冲突后,应用程序必须再次调用 acceptchanges 方法,将已解决冲突的值写入数据源。如果数据源中的所有值都已经是保持不变的值,则方法 acceptchanges 不执行任何操作。
某些提供者实现可以使用锁定来确保没有冲突。在这种情况下,可以保证在调用方法 acceptchanges 时,writer 能成功地将更改写入数据源。调用方法 updaterow、insertrow 或 deleterow 后可立即调用此方法,但是在完成所有更改后只调用此方法一次要更为高效,这样只需要建立一个连接。
注:acceptchanges() 方法将确定 commit_on_accept_changes 是否设置为 true。如果设置为 true,则将同步中的所有更新都提交给数据源。否则应用程序必须显式地调用恰当的 commit() 或 rollback() 方法。
- 抛出:
sqlexception - 如果指针位于插入行上
syncproviderexception - 如果底层同步提供者的 writer 无法将更新写回数据源- 另请参见:
acceptchanges(java.sql.connection),
rowsetwriter,
syncfactory,
syncprovider,
syncproviderexception,
syncresolver