TYPE_SCROLL_SENSITIVE:指定ResultSet游标能够在两个方向移动,且在处理ResultSet期间对ResultSet底层数据的改变会立即反映在ResultSet中
rsConcurrenty必须是ResultSet常量中的一个,用于指定结果集是只读的还是可更新的:
CONCUR_READ_ONLY 默认 指定不能更新ResultSet(即对ResultSet内容的更改不会通过ResultSet的更新方法反映在数据库中)
CONCUR_UPDATABLE 指定能够更新ResultSet(即对ResultSet内容的更改会通过ResultSet的更新方法反映在数据库中)
package com.java.databaseDemo;
import java.sql.*;
public class ModifyDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Connection conn;
Statement stmt;
ResultSet res;
String command;
try {
// 加载驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
// 建立连接
conn = DriverManager.getConnection(
"jdbc:sqlserver://localhost:1433;DatabaseName=MyDB", "sa",
"123");
// 获取Statement对象
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
command = "select * from teacher";
// 执行查询操作
res = stmt.executeQuery(command);
// 处理结果集
while (res.next()) {
for (int i = 1; i <= 4; i++)
System.out.print(res.getString(i) + "\t");
System.out.println();
}
// 插入记录
res.moveToInsertRow();
res.updateInt(1, 9);
res.updateString(2, "郭胖子");
res.updateString(3, "女");
res.updateInt(4, 42);
res.insertRow();
res.moveToCurrentRow();
// 删除记录
res.absolute(4);
res.deleteRow();
// 更改记录
res.first();
res.updateString(2, "郭尼玛");
res.updateString(3, "男");
res.updateRow();
res=stmt.executeQuery(command);
// 处理结果集
System.out.println("The result set after modify:");
while (res.next()) {
for (int i = 1; i <= 4; i++)
System.out.print(res.getString(i) + "\t");
System.out.println();
}
stmt.close();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
采用sql server 2005数据库,在进行数据库更改时,如果设置
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
会抛出异常,因此可以改成 以上完整代码中的
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
要注意删除操作,删除之后 如果 要查看当前结果集,最好再执行一遍查询操作,直接 在当前结果集把游标移到开头然后输出是不行的,因为执行了删除操作,但是不同的JDBC以不同的方式处理删除操作(将删除行移走,使其在结果集中不可见;或者在被删除行的原来位置插入一个空行)。所以可能会提示不能输出已经删除的行等异常。