Để cập nhật nội dung của ResultSet, bạn cần tạo một câu lệnh bằng cách chuyển loại ResultSet có thể cập nhật được, như:
//Creating a Statement object Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
Cũng giống như phương thức getXXX () và setXXX (), giao diện ResultSet cũng cung cấp các phương thức để cập nhật nội dung của một hàng trong tập kết quả updateXXX ().
Các phương thức này chấp nhận các giá trị số nguyên đại diện cho chỉ số hoặc, một giá trị Chuỗi đại diện cho nhãn cột, của hàng sẽ được cập nhật.
Lưu ý rằng nếu bạn cần cập nhật nội dung của ResultSet, bảng phải có khóa chính.
Ví dụ
Giả sử chúng ta có một bảng có tên Nhân viên với 5 bản ghi như hình dưới đây:
+----+---------+--------+----------------+ | Id | Name | Salary | Location | +----+---------+--------+----------------+ | 1 | Amit | 3000 | Hyderabad | | 2 | Kalyan | 4000 | Vishakhapatnam | | 3 | Renuka | 6000 | Delhi | | 4 | Archana | 9000 | Mumbai | | 5 | Sumith | 11000 | Hyderabad | +----+---------+--------+----------------+
Ví dụ sau minh họa cách cập nhật nội dung của tập kết quả:
import java.sql.*; public class ResultSetExample { public static void main(String[] args) throws Exception { //Registering the Driver DriverManager.registerDriver(new com.mysql.jdbc.Driver()); //Getting the connection String mysqlUrl = "jdbc:mysql://localhost/TestDB"; Connection con = DriverManager.getConnection(mysqlUrl, "root", "password"); System.out.println("Connection established......"); //Creating a Statement object Statement stmt = con.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); //Retrieving the data ResultSet rs = stmt.executeQuery("select * from Employees"); //Printing the contents of the table System.out.println("Contents of the table: "); printRs(rs); //Moving the pointer to the starting point in the ResultSet rs.beforeFirst(); //Updating the salary of each employee by 5000 while(rs.next()){ //Retrieve by column name int newSal = rs.getInt("Salary") + 5000; rs.updateInt( "Salary", newSal ); rs.updateRow(); } System.out.println("Contents of the ResultSet after increasing salaries"); printRs(rs); // Set position to second record first 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(" "); //Deleting the row 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{ //Ensure we start with first row 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(); } }
Đầu ra
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!