由于某种原因,当调用ResultSet
时,Oracle JDBC驱动程序可能会将updateRow
光标移动到其他位置(而不是同一行,而不是下一行)(我也在插入和删除行)。我该如何避免这个问题?
注意:结果按表的主键排序(我在SQL中指定了它)。但我越来越怀疑“order by”条款不能正常运作。
答案 0 :(得分:0)
文档中没有说明在updateRow
操作后光标移动到下一行......
来源:
答案 1 :(得分:0)
仅转发可更新结果集维护一个只能在一个方向(向前)移动的游标,并且还可以更新行。必须使用并发模式ResultSet.CONCUR_UPDATABLE
创建并键入ResultSet.TYPE_FORWARD_ONLY
。
注意:默认类型为ResultSet.TYPE_FORWARD_ONLY
。
更改的可见性
在仅向前结果集上进行更新或删除后,结果集的光标不再位于刚刚更新或删除的行上,而是紧接在结果集中的下一行之前(必须先移动到下一行)允许任何进一步的行操作)。这意味着ResultSet.updateRow()
和ResultSet.deleteRow()
所做的更改永远不可见。
如果插入了一行,即使用ResultSet.insertRow()
,则可以在仅前向结果集中看到它。
冲突操作 其他事务不能更改结果集的当前行,因为它将使用更新锁定进行锁定。在允许任何操作之前,提交必须移动到下一行之后,结果集保持打开状态。
某些冲突可能会阻止结果集执行更新/删除:
如果当前行被同一事务中的语句删除,则对ResultSet.updateRow()
的调用将导致异常,因为光标不再位于有效行上。
答案 2 :(得分:0)
此问题是由于用户错误造成的。我在另一台机器上运行了另一个应用程序副本,我忘记了这一点,同时也在更改数据库。