RowSet Interface trong JDBC



Nếu cần thao tác với JavaBean, bạn nên sử dụng Interface này. Nó bổ sung sự hỗ trợ cho JDBC tới mô hình thành phần trong JavaBean. Rowset Interface cung cấp một tập hợp các thuộc tính của JavaBean cho phép một instance của RowSet để được cấu hình để kết nối tới một Data source của JDBC và đọc dữ liệu từ Data source đó.

Để truyền dữ liệu đầu vào tới thuộc tính command của một Rowset, bạn sử dụng các phương thức setter bao gồm setInt, setBytes, setString, … Command này là truy vấn SQL mà Rowset sử dụng khi nó lấy dữ liệu từ một Relational Database.

Dưới đây là cách để tạo và thực thi RowSet:

JdbcRowSet rowSet = RowSetProvider.newFactory().createJdbcRowSet();  
rowSet.setUrl("jdbc:mysql://localhost/sinhvien");  
rowSet.setUsername("root");  
rowSet.setPassword("123456");  
           
rowSet.setCommand("SELECT * FROM sinhvienk60");  
rowSet.execute();  

Đây là cách thức mới để lấy instance của Rowset bắt đầu từ JDK7.

Sử dụng RowSet mang lại cho bạn các lợi thế sau:

  • Sử dụng dễ dàng và linh động.

  • Theo mặc định, nó là Scrollable và Updatable.

Ví dụ về RowSet trong JDBC

RowSet hỗ trợ xử lý sự kiện, tuy nhiên để đơn giản, trong ví dụ đầu tiên này, mình sẽ không đề cập đến phần code để thực hiện tác vụ này.

package com.vietjack.jdbc; 

import javax.sql.rowset.JdbcRowSet;  
import javax.sql.rowset.RowSetProvider;  
  
public class ViDuJDBC {  
        public static void main(String[] args) throws Exception {  
                 Class.forName("com.mysql.jdbc.Driver");  
      
    //Tao va thuc thi RowSet  
        JdbcRowSet rowSet = RowSetProvider.newFactory().createJdbcRowSet();  
        rowSet.setUrl("jdbc:mysql://localhost/sinhvien");  
        rowSet.setUsername("root");  
        rowSet.setPassword("123456");  
                   
        rowSet.setCommand("SELECT * FROM sinhvienk60");  
        rowSet.execute();  
                   
    while (rowSet.next()) {  
                        // Tao su kien con tro di chuyen  
                        System.out.println("\nMSSV: " + rowSet.getInt(1));  
                        System.out.println("\nHo: " + rowSet.getString(2));  
                        System.out.println("\nTen: " + rowSet.getString(3));
                        System.out.println("\nDiem thi: " + rowSet.getInt(4));  
                }  
                 
        }  
}  

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ả:

RowSet trong JDBC

Ví dụ RowSet về xử lý sự kiện

Để thực hiện xử lý sự kiện với RowSet, bạn cần bổ sung thêm instance của RowSetLintener trong phương thức addRowSetListener của RowSet.

Bạn cần triển khai 3 phương thức sau của RowSetListenner Interface:

  • public void cursorMoved(RowSetEvent event);

  • public void rowChanged(RowSetEvent event);

  • public void rowSetChanged(RowSetEvent event);

Bây giờ, bạn theo dõi ví dụ sau. Trong ví dụ này, chúng ta lấy dữ liệu và thực hiện một số tác vụ bổ sung trong khi con trỏ di chuyển, thay đổi hoặc khi rowset thay đổi. Hoạt động xử lý ngoại lệ không thể được thực hiện bởi sử dụng ResultSet.

package com.vietjack.jdbc; 

import java.sql.Connection;  
import java.sql.DriverManager;  
import java.sql.ResultSet;  
import java.sql.Statement;  
import javax.sql.RowSetEvent;  
import javax.sql.RowSetListener;  
import javax.sql.rowset.JdbcRowSet;  
import javax.sql.rowset.RowSetProvider;  
  
public class ViDuJDBC {  
        public static void main(String[] args) throws Exception {  
                 Class.forName("com.mysql.jdbc.Driver");  
      
    //Creating and Executing RowSet  
    JdbcRowSet rowSet = RowSetProvider.newFactory().createJdbcRowSet();  
    rowSet.setUrl("jdbc:mysql://localhost/sinhvien");  
    rowSet.setUsername("root");  
    rowSet.setPassword("123456");  
                   
        rowSet.setCommand("SELECT * FROM sinhvienk60");  
        rowSet.execute();  
                   
    //Bo sung them Listener va di chuyen qua RowSet  
    rowSet.addRowSetListener(new MyListener());  
  
                 while (rowSet.next()) {  
                        // Tao su kien con tro di chuyen  
                        System.out.println("\nMSSV: " + rowSet.getInt(1));  
                        System.out.println("\nHo: " + rowSet.getString(2));  
                        System.out.println("\nTen: " + rowSet.getString(3));
                        System.out.println("\nDiem thi: " + rowSet.getInt(4));  
                }  
                 
        }  
}  
  
class MyListener implements RowSetListener {  
      public void cursorMoved(RowSetEvent event) {  
                System.out.println("\nCon tro di chuyen ...");  
      }  
     public void rowChanged(RowSetEvent event) {  
                System.out.println("\n Con tro thay doi ...");  
     }  
     public void rowSetChanged(RowSetEvent event) {  
                System.out.println("\nRowSet thay doi...");  
     }  
}  

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ả:

RowSet trong JDBC

Mọi người cho thể tham gia khóa học thứ 3 của vietjackteam vào đầu tháng 07/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. Khóa học cũng đưa 200 câu hỏi phỏng vấn java trên https://www.javatpoint.com/corejava-interview-questions vào nội dung để giúp các bạn dễ dàng vượt qua kì phỏng vấn

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. 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.