如何使用JDBC程序更新ResultSet的内容?

要更新ResultSet的内容,您需要通过传递ResultSet类型的可更新来创建一条语句,如下所示:

//创建一个Statement对象
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);

就像getXXX()setXXX()方法一样,ResultSet接口也提供了更新结果集中行内容的方法updateXXX()

这些方法接受表示要更新的行的索引的整数值,或表示列标签的String值。

请注意,如果您需要更新ResultSet的内容,则该表应具有主键。

示例

假设我们有一个名为Employees的表,具有5条记录,如下所示:

+----+---------+--------+----------------+
| Id | Name    | Salary | Location       |
+----+---------+--------+----------------+
|  1 | Amit    | 3000   | Hyderabad      |
|  2 | Kalyan  | 4000   | Vishakhapatnam |
|  3 | Renuka  | 6000   | Delhi          |
|  4 | Archana | 9000   | Mumbai         |
|  5 | Sumith  | 11000  | Hyderabad      |
+----+---------+--------+----------------+

下面的示例演示如何更新结果集的内容:

import java.sql.*;
public class ResultSetExample {
   public static void main(String[] args) throws Exception {
      //注册驱动程序
      DriverManager.registerDriver(new com.mysql.jdbc.Driver());
      //获得连接
      String mysqlUrl = "jdbc:mysql://localhost/TestDB";
      Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
      System.out.println("Connection established......");
      //创建一个Statement对象
      Statement stmt = con.createStatement(
      ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
      //检索数据
      ResultSet rs = stmt.executeQuery("select * from Employees");
      //打印表的内容
      System.out.println("Contents of the table: ");
      printRs(rs);
      //的起点
      rs.beforeFirst();
      //每位员工的薪水提高5000-
      while(rs.next()){
         //通过列名检索
         int newSal = rs.getInt("Salary") + 5000;
         rs.updateInt( "Salary", newSal );
         rs.updateRow();
      }
      System.out.println("Contents of the ResultSet after increasing salaries");
      printRs(rs);
      //首先将位置设置为第二条记录
      rs.beforeFirst();
      rs.absolute(2);
      System.out.println("Record we need to delete: ");
      System.out.print("ID: " + rs.getInt("id"));
      System.out.print(", Salary: " + rs.getInt("Salary"));
      System.out.print(", Name: " + rs.getString("Name"));
      System.out.println(", Location: " + rs.getString("Location"));
      System.out.println(" ");
      //删除行
      rs.deleteRow();
      System.out.println("Contents of the ResultSet after deleting one records...");
      printRs(rs);
      System.out.println("Goodbye!");
   }
   public static void printRs(ResultSet rs) throws SQLException{
      //确保我们从第一行开始
      rs.beforeFirst();
      while(rs.next()){
         System.out.print("ID: " + rs.getInt("id"));
         System.out.print(", Salary: " + rs.getInt("Salary"));
         System.out.print(", Name: " + rs.getString("Name"));
         System.out.println(", Location: " + rs.getString("Location"));
      }
      System.out.println();
   }
}

输出结果

Connection established......
Contents of the table:
ID: 1, Salary: 3000, Name: Amit, Location: Hyderabad
ID: 2, Salary: 4000, Name: Kalyan, Location: Vishakhapatnam
ID: 3, Salary: 6000, Name: Renuka, Location: Delhi
ID: 4, Salary: 9000, Name: Archana, Location: Mumbai
ID: 5, Salary: 11000, Name: Sumith, Location: Hyderabad
Conetnets of the resultset after increaing salaries
ID: 1, Salary: 8000, Name: Amit, Location: Hyderabad
ID: 2, Salary: 9000, Name: Kalyan, Location: Vishakhapatnam
ID: 3, Salary: 11000, Name: Renuka, Location: Delhi
ID: 4, Salary: 14000, Name: Archana, Location: Mumbai
ID: 5, Salary: 16000, Name: Sumith, Location: Hyderabad
Record we need to delete:
ID: 2, Salary: 9000, Name: Kalyan, Location: Vishakhapatnam
Contents of the resultset after deleting one records...
ID: 1, Salary: 8000, Name: Amit, Location: Hyderabad
ID: 3, Salary: 11000, Name: Renuka, Location: Delhi
ID: 4, Salary: 14000, Name: Archana, Location: Mumbai
ID: 5, Salary: 16000, Name: Sumith, Location: Hyderabad
Goodbye!