『読込み専用の結果セットに対する操作が無効です。』
Oracle9i9.2.0.1.0 で ResultSetによる更新を行ったところ例外が発生。
PreparedStatement stmt = connection.prepareStatement( sqlStr,ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE); stmt.setString(1, pkStr); resultSet = stmt.executeQuery(); beRecord = resultSet.next(); if (beRecord) { for (int i = 1; i <= columnCount; i++) { resultSet.updateString(i , (String)token.next()); } resultSet.updateRow(); }
String sqlStr = "SELECT * FROM ANY_TABLE FOR UPDATE";
SELECT の * がよくないらしい。
以下の様に全ての項目を指定したところ正常に更新できた。
String sqlStr = "SELECT C1,C2,C3 FROM ANY_TABLE FOR UPDATE";
ちなみにインサートの場合は以下を使用
RowSet#moveToInsertRow RowSet#updateXXX RowSet#insertRow
インサートを行ったら以下の例外が発生した。
java.sql.SQLException: ORA-00907: 右カッコがありません。
SELECT 文に FOR UPDATE を指定するとだめみたい。
はずしたところうまくいった。
それにしても変なメッセージ?カッコを付ければ解決するのか?
参考資料
JDBC 開発者ガイドおよびリファレンス
http://otndnld.oracle.co.jp/document/oracle9i/920/generic/java/J06299-01.pdf
第13章『結果セット拡張』『結果セットの更新』