代码 conn = DriverManager.getConnection(url, username, password); stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); String sql = "select * from users"; rs = stmt.executeQuery(sql); // System.out.println(rs.getConcurrency()); rs.next(); // 更新一行 rs.updateString("name", "admin"); rs.updateRow();
在JDBC使用可更新的结果集使用时,出现以下问题
后来查阅很多资料和帖子。发现主要有2个问题引起的
1、oracle class12.jar这个驱动包不支持可读写结果集。换成最新的JDBC驱动即可
2、oracle数据库的特性
设定可更新ResultSet.CONCUR_UPDATABLE,如果是Oracle数据库,在写查询语句时千万不要写select * from table,这样就不能更新结果集(rs.updateString),要把你要查询的字段一一写出来。
用select * 会导致该ResultSet强制readonly,但是同样的效果语句如果写成select 字段字段1,字段2,字段3...就会正常完成。
按照2条的问题,我修改sql语句,改为
select id, name,password from users
问题得与解决。