RowSet не разрешен для записи - PullRequest
2 голосов
/ 17 августа 2011

Пожалуйста, помогите мне, я пытаюсь обновить значение одного столбца в наборе строк, но я постоянно получаю исключение .. этот набор строк не разрешен для записи. Я много искал, но не нашел способа включить запись набора строк. Упомянутый ниже код, который я использую, и следующее исключение:

Class.forName("oracle.jdbc.driver.OracleDriver");
        Connection conn = DriverManager.getConnection(
                "jdbc:oracle:thin:@localhost:1521:orcl", uname, pwd);

        String query = "select * from " + table;
        PreparedStatement preparedStatement = conn.prepareStatement(query);
        ResultSet rset = preparedStatement.executeQuery();
        OracleCachedRowSet oracleCachedRowSet = new OracleCachedRowSet();
        oracleCachedRowSet.populate(rset);
        ResultSetMetaData resultSetMetaData = oracleCachedRowSet.getMetaData();
        int numberOfColumns = resultSetMetaData.getColumnCount();

        while (oracleCachedRowSet.next()) {

            oracleCachedRowSet.updateBigDecimal(1, new BigDecimal(99));
            oracleCachedRowSet.updateRow();
            oracleCachedRowSet.acceptChanges();
            for (int i = 1; i <= numberOfColumns; i++) {

                System.out.print(oracleCachedRowSet.getString(i) + " ");

            }
        }
    }

Исключение наступает при выполнении вышеуказанного кода:

java.sql.SQLException: The RowSet is not write enabled
    at oracle.jdbc.rowset.OracleCachedRowSet.checkColumnIndex(OracleCachedRowSet.java:912)
    at oracle.jdbc.rowset.OracleCachedRowSet.updateObject(OracleCachedRowSet.java:5931)
    at oracle.jdbc.rowset.OracleCachedRowSet.updateBigDecimal(OracleCachedRowSet.java:6430)
    at Test.getDBConnection(Test.java:86)
    at Test.main(Test.java:37)

Ответы [ 2 ]

2 голосов
/ 17 августа 2011

Попробуйте установить:

oracleCachedRowSet.setReadOnly(false);
0 голосов
/ 17 августа 2011

Javadoc для ResultSet сообщает нам

Объект ResultSet по умолчанию не обновляется и имеет курсор, который перемещается только вперед.

Я думаю , сообщение вашего исключения связано с этой проблемой.JavaDoc предоставляет пример того, как создать прокручиваемый и обновляемый набор результатов:

Statement stmt = con.createStatement(
                                  ResultSet.TYPE_SCROLL_INSENSITIVE,
                                  ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2");
// rs will be scrollable, will not show changes made by others,
// and will be updatable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...