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 使用的类。我不太确定如何修改您的代码以解决您看到的错误。然而,让您的代码看起来更像“传统”JDBC 同时还保留更改 Java 中结果集的能力并不难。您真正需要做的就是将额外的两个参数传递给prepareStatement方法调用:

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 回答