将对此 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