スクロール可能なResultSet

3143 ワード

スクロール可能なResultSetの作成:public Statement createStatement(int rsType,int rsConcurrenty)throws SQLExceptionでは、rsTypeは3つの変数の1つである必要があります.ResultSetインタフェースに追加してオブジェクトタイプを示します.TYPE_FORWARD_ONLY:スクロール不可の結果セットを作成し、デフォルトTYPE_SCROLL_INSENSITIVE:ResultSetカーソルを2方向に移動できるように指定し、ResultSetの処理中にResultSet下位データに対する変更はResultSetに反映されません.プログラムがデータベースを再問合せしない限り
TYPE_SCROLL_SENSITIVE:ResultSetカーソルを2方向に移動できるように指定し、ResultSetの処理中にResultSet下位データの変更が直ちにResultSetに反映されます.
rsConcurrentyはResultSet定数の1つでなければなりません.結果セットが読み取り専用か更新可能かを指定します.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は、削除操作を異なる方法で処理する(削除行を結果セットに表示されないように移動するか、削除された行の元の位置に空の行を挿入する).削除した行などの異常を出力できないというメッセージが表示される場合があります.