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に更新します.
結果セットの更新が必要な場合は、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();
}
}
}
}