0

何らかの理由で、Oracle JDBC ドライバーが呼び出されたときに、ResultSetカーソルを別の場所 (同じ行ではなく、次の行ではなく) に移動する場合があります (行のupdateRow挿入と削除も行っています)。この問題を回避するにはどうすればよいですか?

注: 結果は、テーブルの主キーによって並べ替えられます (これは SQL で指定しました)。しかし、「order by」句が適切に機能していないのではないかとますます疑っています。

4

3 に答える 3

0

この問題は、ユーザー エラーが原因でした。別のマシンでアプリケーションの別のコピーを実行していましたが、それは忘れていましたが、同時にデータベースを変更していました。

于 2013-10-31T09:16:56.240 に答える
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

ドキュメントのどこにも、updateRow操作後にカーソルが次の行に移動するとは書かれていません...

ソース:

  1. http://docs.oracle.com/cd/B28359_01/java.111/b31224/resltset.htm
  2. http://docs.oracle.com/javase/tutorial/jdbc/basics/retriving.html#rs_update
  3. http://docs.oracle.com/cd/A97335_02/apps.102/a83724/resltse4.htm
  4. http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#updateRow%28%29
于 2013-10-14T21:18:40.667 に答える