Cập nhật ResultSet trong JDBC



Tương tự như khi quan sát dữ liệu trong ResultSet, bạn có thể sử dụng rất nhiều phương thức (có 2 phiên bản cho chỉ mục cột và tên cột) của ResultSet Interface để cập nhật dữ liệu. Chẳng hạn như updateArray, updateByte, updateString, updateInt, …

Bạn nên chú ý là các phương thức update này không cập nhật cơ sở dữ liệu cơ sở (Underlying Database). Để cập nhật cơ sở dữ liệu này, bạn nên sử dụng phương thức updateRow hoặc insertRow.

Dưới đây mình miêu tả một số phương thức:

1. public void updateInt(int chi_muc_cot, int x) throws SQLException

Cập nhật giá trị của cột trong hàng hiện tại hoặc trong hàng đang được chèn tới giá trị nguyên x.

2. public void updateInt(int ten_cot, int x) throws SQLException

Cập nhật giá trị của tên cột đã cho trong hàng hiện tại hoặc hàng đang được chèn tới giá trị nguyên x.

3. public void updateString(int chi_muc_cot, String x) throws SQLException

Cập nhật giá trị của cột trong hàng hiện tại hoặc trong hàng đang được chèn tới giá trị x ở dạng chuỗi.

4. public void updateString(int ten_cot, String x)

Cập nhật giá trị của tên cột đã cho trong hàng hiện tại hoặc hàng đang được chèn tới giá trị x ở dạng chuỗi.

...

Ví dụ minh họa cập nhật ResultSet trong JDBC

Ví dụ dưới đây sẽ minh họa các hoạt động INSERT, UPDATE, và DELETE trên một bảng dữ liệu.

package com.vietjack.jdbc; 

//Buoc 1: Ban can inport cac package can thiet
import java.sql.*;

public class ViDuJDBC {
   // Ten cua driver va dia chi URL cua co so du lieu
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   static final String DB_URL = "jdbc:mysql://localhost/sinhvien";

   //  Ten nguoi dung va mat khau cua co so du lieu
   static final String USER = "root";
   static final String PASS = "123456";
   
 public static void main(String[] args) {
   Connection conn = null;
   try{
      // Buoc 2: Dang ky Driver
      Class.forName("com.mysql.jdbc.Driver");

      // Buoc 3: Mo mot ket noi
      System.out.println("Dang ket noi toi co so du lieu ...");
      conn = DriverManager.getConnection(DB_URL,USER,PASS);

      // Buoc 4: Thuc thi truy van
      System.out.println("Tao cac lenh truy van SQL ...");
      Statement stmt = conn.createStatement(
                           ResultSet.TYPE_SCROLL_INSENSITIVE,
                           ResultSet.CONCUR_UPDATABLE);
     
      String sql = "SELECT mssv, ho, ten, diemthi FROM sinhvienk60";
      ResultSet rs = stmt.executeQuery(sql);

      System.out.println("Liet ke result set de tham chieu ...");
      printRs(rs);

      // Buoc 6: Lap qua result set va tru diemthi di 0.5
      // Di chuyen toi vi tri truoc hang dau tien de vong lap while lam viec chinh xac
      rs.beforeFirst();
      // Buoc 7: Lay du lieu result set
      while(rs.next()){
         // Lay du lieu boi su dung ten cot
         int diemThiMoi = rs.getInt("diemthi") - 0.5;
         rs.updateDouble( "diemthi", diemThiMoi );
         rs.updateRow();
      }
      System.out.println("Liet ke result set de hien thi diem thi moi ...");
      printRs(rs);
      // Chen mot ban ghi vao trong bang.
      //Move to insert row and add column data with updateXXX()
      System.out.println("Chen mot ban ghi moi ...");
      rs.moveToInsertRow();
      rs.updateInt("mssv",4);
      rs.updateString("ho","Cao Thi Thanh");
      rs.updateString("ten","Hien");
      rs.updateInt("diemthi",5);
      // Ky thac hang vua chen
      rs.insertRow();

      System.out.println("Liet ke result set de hien thi cac ban ghi ...");
      printRs(rs);
      
      // Xoa ban ghi thu hai trong bang.
      // Thiet lap vi tri con tro tai hang thu hai
      rs.absolute( 2 );
      System.out.println("Liet ke ban ghi truoc khi xoa ...");
      // Lay du lieu boi su dung ten cot
      int mssv  = rs.getInt("mssv");
      int diemthi = rs.getInt("diemthi");
      String ho = rs.getString("ho");
      String ten = rs.getString("ten");

      // Hien thi cac gia tri
       System.out.print("\nMSSV: " + mssv);
       System.out.print("\nHo: " + ho);
       System.out.println("\nTen: " + ten);
       System.out.print("\nDiem Thi: " + diemthi);
       System.out.print("\n=================");

     // Xoa hang
      rs.deleteRow();
      System.out.println("Liet ke result set sau khi xoa ...");
      printRs(rs);

      // Buoc 8: Don sach moi truong va giai phong resource
      rs.close();
      stmt.close();
      conn.close();
   }catch(SQLException se){
      // Xu ly cac loi cho JDBC
      se.printStackTrace();
   }catch(Exception e){
      // Xu ly cac loi cho Class.forName
      e.printStackTrace();
   }finally{
      // Khoi finally duoc su dung de dong cac resource
      try{
         if(conn!=null)
            conn.close();
      }catch(SQLException se){
         se.printStackTrace();
      }// Ket thuc khoi finally
   }// Ket thuc khoi try
   System.out.println("\nVietJack chuc cac ban hoc tot!");
}// Ket thuc main

   public static void printRs(ResultSet rs) throws SQLException{
      // Bao dam rang chung ta bat dau tu hang dau tien
      rs.beforeFirst();
      while(rs.next()){
         // Lay du lieu boi su dung ten cot
         int mssv  = rs.getInt("mssv");
         int diemthi = rs.getInt("diemthi");
         String ho = rs.getString("ho");
         String ten = rs.getString("ten");

         // Hien thi cac gia tri
       System.out.print("\nMSSV: " + mssv);
       System.out.print("\nHo: " + ho);
       System.out.println("\nTen: " + ten);
       System.out.print("\nDiem Thi: " + diemthi);
       System.out.print("\n=================");
     }
     System.out.println();
   }// Ket thuc printRs()
}// Ket thuc ViDuJDBC

Bạn sao chép, dán và lưu ví dụ trong ViDuJDBC.java, sau đó chạy chương trình Java trên sẽ cho kết quả:

Cập nhật Result Set trong JDBC Cập nhật Result Set trong JDBC Cập nhật Result Set trong JDBC Cập nhật Result Set trong JDBC

Mọi người cho thể tham gia khóa học thứ 5 của vietjackteam vào đầu tháng 12/2017 do anh Nguyễn Thanh Tuyền, admin vietjack.com trực tiếp giảng dạy tại Hà Nội. Chi tiết nội dung khóa học tham khỏa link : Khóa học Java.Các bạn học CNTT, điện tử viễn thông, đa phương tiện, điện-điện tử, toán tin có thể theo học khóa này. Số lượng các công việc Java hoặc .NET luôn gấp ít nhất 3 lần Android hoặc iOS trên thị trường tuyển dụng.

Mọi người có thể xem demo nội dung khóa học tại địa chỉ Video demo khóa học Offline

Các bạn ở xa học không có điều kiện thời gian có thể tham dự khóa Java online để chủ động cho việc học tập. Nhân dịp tháng khuyến mại, trong tháng 11/2017, giá khóa học chỉ còn 270k, khóa học bằng Tiếng Việt với gần 100 video, các bạn có thể chủ động bất cứ lúc nào, và xem mãi mãi. Thông tin khóa học tại Khóa học Java Online trên Udemy

Loạt bài hướng dẫn học Java JDBC cơ bản và nâng cao của chúng tôi dựa trên nguồn tài liệu của: Tutorialspoint.com



Demo một bài giảng trong khóa học online tại vietjackteam.