首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RowSet未启用写入

RowSet未启用写入
EN

Stack Overflow用户
提问于 2011-08-17 17:18:07
回答 2查看 461关注 0票数 2

请帮帮我,我正在尝试更新行集中某一列的值,但我不断得到一个exception..that行集未启用写操作。我搜索了很多,但没有找到一种方法来启用行集写入。下面提到我正在使用的代码和以下异常:

代码语言:javascript
复制
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) + " ");

            }
        }
    }

执行上述代码时出现异常:

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

发布于 2011-08-17 17:33:49

尝试设置:

代码语言:javascript
复制
oracleCachedRowSet.setReadOnly(false);
票数 2
EN

Stack Overflow用户

发布于 2011-08-17 17:33:54

ResultSet的Javadoc告诉我们

默认的ResultSet对象是不可更新的,它的游标只能向前移动。

我猜,您的异常消息与该问题相关。javaDoc提供了一个如何创建可滚动和可更新结果集的示例:

代码语言:javascript
复制
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
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7090446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档