可滚动的ResultSet

创建可滚动的ResultSet:
public Statement createStatement(int rsType, int rsConcurrenty) throws SQLException
其中,rsType必须是一下三种变量之一,添加到ResultSet接口中指示其对象类型:
TYPE_FORWARD_ONLY:创建不可滚动的结果集,默认
TYPE_SCROLL_INSENSITIVE:指定ResultSet游标能够在两个方向移动,且在处理ResultSet期间对ResultSet底层数据的改变不会反映在ResultSet中,除非程序再次查询数据库

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以不同的方式处理删除操作(将删除行移走,使其在结果集中不可见;或者在被删除行的原来位置插入一个空行)。所以可能会提示不能输出已经删除的行等异常。

你可能感兴趣的:(可滚动的ResultSet)