Java 行集未启用写入

Java 行集未启用写入,java,oracle,Java,Oracle,请帮助我,我正在尝试更新行集中一列的值,但我不断收到异常..该行集未启用写功能。 我搜索了很多,但没有找到使行集写功能启用的方法。 在下面提到我正在使用的代码和以下例外情况: Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:orcl",

请帮助我,我正在尝试更新行集中一列的值,但我不断收到异常..该行集未启用写功能。 我搜索了很多,但没有找到使行集写功能启用的方法。 在下面提到我正在使用的代码和以下例外情况:

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) + " ");

            }
        }
    }
尝试设置:

oracleCachedRowSet.setReadOnly(false);
Javadoc告诉我们

默认的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

非常感谢…将只读设置为false后,它现在可以工作了。问题涉及行集,而不是结果集。行集是一个结果集。但是,另一个答案却解决了这个问题。
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