0

出于某种原因,Oracle JDBC 驱动程序可能会在调用ResultSet时将光标移动到其他地方(不是到同一行,也不是到下一行)updateRow(我也在插入和删除行)。我怎样才能避免这个问题?

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

4

3 回答 3

0

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

注意:默认类型是ResultSet.TYPE_FORWARD_ONLY.

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

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

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

于 2013-10-24T14:13:34.780 回答
0

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

于 2013-10-31T09:16:56.240 回答