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