jdbcは結果セットを更新可能


jdbcではResultSetはjdk 5.0以降はデフォルトでスクロール可能で更新不可です.スクロール可能とは、absolute()、previous()、first()などの操作を呼び出して、結果セットのポインタ位置を更新できることを意味します.
結果セットの更新が必要な場合は、ResultSet.に値を設定できます.CONCUR_UPDATABLE、デフォルトはResultSet.CONCUR_READ_ONLY.
oracleデータベースに接続している場合、クエリーのsql文がselect*fromテーブル名である場合、oracleのデフォルトは読み取り専用でテーブルにアクセスするため、プログラムは更新可能な結果セットに設定されていますが、何の役にも立たないので、selectワードセグメント名が必要です.....fromテーブル名を使用して、更新可能な結果セットを呼び出すことができます.
次に、結果セットを更新する操作を示し、テーブルのsname列を「名前」+iに更新します.
   
package com.shizhan.main;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.shizhan.util.DatabaseUtil;

public class TestResult {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
	   
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet  rs = null;
		//   oracle      ,            , sql     select *from   ,      ,    select
		//  1,  2.。。from  
		String sql ="select sno,sname from student";
		try {
			conn = DatabaseUtil.getConnection();
			
			//ResultSet.TYPE_SCROLL_INSENSITIVE      
			//ResultSet.CONCUR_UPDATABLE      
			ps = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, 
					ResultSet.CONCUR_UPDATABLE);
			
			
			
			rs = ps.executeQuery();
			
			//       
			rs.last();
			//       
			int rownum = rs.getRow();
			
			for(int i=rownum;i>0;i--)
			{
				//      i   
				rs.absolute(i);
				
				System.out.println("sno:"+rs.getInt(1)
						+"\t"+"sname"+rs.getString(2));
				//       
				rs.updateString(2,"  "+i);
				//    ,   
				rs.updateRow();
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			DatabaseUtil.close(rs);
			DatabaseUtil.close(ps);
			DatabaseUtil.close(conn);
		}
		

	}

}
package com.shizhan.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DatabaseUtil {
   
	static Connection connection = null;
	static String driver = "oracle.jdbc.driver.OracleDriver";
	static String url = "jdbc:oracle:thin:localhost:1521:orcl";
	static String username ="scott";
	static String password ="tiger";
	
	public static Connection getConnection() throws Exception
	{
		Class.forName(driver);
		connection = DriverManager.getConnection(url,username,password);
		return connection;
	}
	
	public static void close(Connection conn) {//      
		if(conn != null) {				//  conn       
			try {
				conn.close();			//  conn      
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	public static void close(PreparedStatement pstmt) {//       
		if(pstmt != null) {				//  pstmt        
			try {
				pstmt.close();			//  pstmt     
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	public static void close(Statement pstmt) {//       
		if(pstmt != null) {				//  pstmt        
			try {
				pstmt.close();			//  pstmt     
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	public static void close(ResultSet rs) {//       
		if(rs != null) {				//  rs       null
			try {
				rs.close();				//  rs     
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}