1

RowSet 内のいくつかの行を更新する必要がありますが、更新しようとすると、更新できない例外が発生します。なんで?

JdbcRowSet rs = new oracle.jdbc.rowset.OracleJDBCRowSet(con);
rs.setCommand("SELECT status FROM s");
rs.setUrl("jdbc:oracle:thin:@localhost:1521:orcl");
rs.setUsername("username");
rs.setPassword("password");
rs.setReadOnly(false);
rs.execute();

 // this doesn't work
rs.last();
rs.deleteRow();
 // this doesn't work too
rs.absolute(2);
rs.updateInt("status", 10);
rs.updateRow();
4

1 に答える 1

1

あなたが得ている例外は

java.sql.SQLException: 読み取り専用の結果セットに対する無効な操作: deleteRow

または似たようなもの。これは、あなたのコードをテストしているときに見たものです。

正直なところ、OracleJDBCRowSet というクラスが以前に使用されているのを見たことがありませんでした。表示されたエラーを回避するためにコードを変更する方法がよくわかりませんでした。ただし、Java で結果セットを変更する機能を保持しながら、コードを「従来の」JDBC のように見せることはそれほど難しくありません。実際に行う必要があるのは、prepareStatementメソッド呼び出しに追加の 2 つのパラメーターを渡すことだけです。

Connection con = DriverManager.getConnection(
    "jdbc:oracle:thin:@localhost:1521:orcl", "username", "password");

Statement stmt = con.prepareStatement(
    ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);

ResultSet rs = stmt.executeQuery("SELECT status FROM s");

/* this should work */
rs.last();
rs.deleteRow();
/* this should also work */
rs.absolute(2);
rs.updateInt("status", 10);
rs.updateRow();
于 2011-04-30T22:44:43.177 に答える