请帮帮我,我正在尝试更新行集中一列的值,但我不断得到一个异常..这个行集没有写入启用。 我搜索了很多但没有找到一种方法来启用行集写入。 提到我正在使用的代码和以下异常:
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)
答案 0 :(得分:2)
尝试设置:
oracleCachedRowSet.setReadOnly(false);
答案 1 :(得分:-1)
ResultSet
的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