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