『読込み専用の結果セットに対する操作が無効です。』

Oracle9i9.2.0.1.0 で ResultSetによる更新を行ったところ例外が発生。

java.sql.SQLException: 読込み専用の結果セットに対する操作が無効です。

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章『結果セット拡張』『結果セットの更新』