невозможно обновить JDBC RowSet с базой данных Oracle - PullRequest
1 голос
/ 30 апреля 2011

Мне нужно обновить некоторые строки в 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();

1 Ответ

1 голос
/ 01 мая 2011

Я предполагаю, что вы получаете исключение

java.sql.SQLException: Invalid operation for read only resultset: 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();
...