在ResultSet updateRow之后重置光标位置

时间:2013-10-14 10:47:11

标签: oracle jdbc oracle11g

由于某种原因,当调用ResultSet时,Oracle JDBC驱动程序可能会将updateRow光标移动到其他位置(而不是同一行,而不是下一行)(我也在插入和删除行)。我该如何避免这个问题?

注意:结果按表的主键排序(我在SQL中指定了它)。但我越来越怀疑“order by”条款不能正常运作。

3 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

仅转发可更新结果集维护一个只能在一个方向(向前)移动的游标,并且还可以更新行。必须使用并发模式ResultSet.CONCUR_UPDATABLE创建并键入ResultSet.TYPE_FORWARD_ONLY

注意:默认类型为ResultSet.TYPE_FORWARD_ONLY

更改的可见性 在仅向前结果集上进行更新或删除后,结果集的光标不再位于刚刚更新或删除的行上,而是紧接在结果集中的下一行之前(必须先移动到下一行)允许任何进一步的行操作)。这意味着ResultSet.updateRow()ResultSet.deleteRow()所做的更改永远不可见。 如果插入了一行,即使用ResultSet.insertRow(),则可以在仅前向结果集中看到它。

冲突操作 其他事务不能更改结果集的当前行,因为它将使用更新锁定进行锁定。在允许任何操作之前,提交必须移动到下一行之后,结果集保持打开状态。

某些冲突可能会阻止结果集执行更新/删除: 如果当前行被同一事务中的语句删除,则对ResultSet.updateRow()的调用将导致异常,因为光标不再位于有效行上。

答案 2 :(得分:0)

此问题是由于用户错误造成的。我在另一台机器上运行了另一个应用程序副本,我忘记了这一点,同时也在更改数据库。