Hotline: 0919 365 363; Email: daotao@r2s.edu.vn

JDBCRowset trong Java

JDBCRowset trong Java

Kiến thức hữu ích

JDBCRowset trong Java

Jdbcrowset trong java được hiểu việc thực thi các câu lệnh như Insert, Update, Delete, Select, … trong một ứng dụng. Cùng R2S tìm hiểu chi tiết hơn về JDBCRowset ngay trong bài viết dưới đây nhé!

Jdbcrowset trong java – CachedRowSet

JDBCRowset trong Java
JDBCRowset trong Java

Nếu như việc thực thi các câu lệnh như Insert, Update, Delete sẽ trả về một số nguyên cho chúng ta biết số dòng bị ảnh hưởng thì việc thực thi câu lệnh Select sẽ được trả về tập kết quả là số dòng dữ liệu truy vấn được và đối tượng RowSet giữ tập kết quả này.

JDBCRowset trong java có 5 loại như: CachedRowSet, JdbcRowSet, WebRowSet, JoinRowSet, FilteredRowSet. Sử dụng RowSet sẽ giúp các lập trình viên thực hiện các thao tác thêm, xóa và cập nhật một cách tiện lợi hơn mà không cần phải viết các câu lệnh sql.

  • CachedRowSet không yêu cầu chúng ta phải duy trì một kết nối với cơ sở dữ liệu. Nó chỉ thực hiện kết nối khi có submit và điều này sẽ giúp tăng hiệu suất cho cơ sở dữ liệu. CachedRowSet có thể thực hiện các hoạt động như sau đây trên cơ sở dữ liệu
  • Insert: Để thực hiện thêm một dòng dữ liệu vào bảng, chúng ta nên sử dụng phương thức moveToInsertRow()
  • Update: Phương thức updateRow() được sử dụng để cập nhật một dòng dữ liệu của bảng
  • Delete: Sử dụng phương thức delete Row() để xóa một dòng dữ liệu của bảng.
  • Select: Một đối tượng CachedRowSet có thể cuộn (scrollable) và điều này cho phép chúng ta duyệt bản ghi theo nhiều cách. Một khi con trỏ nằm tại dòng mà chúng ta mong muốn, các phương thức getter có thể được gọi để lấy các giá trị của các cột.

Thêm dữ liệu trong CachedRowSet

crs.moveToInsertRow();

// Chỉ định cột và dữ liệu được thêm mới
crs.updateDatatype(int columnIndex, Datatype x);

//...

crs.insertRow();
crs.moveToCurrentRow();
crs.acceptChanges(); //submit

Trong đó crs là đối tượng CachedRowSet, columnIndex bắt đầu từ 1, Datatype là kiểu dữ liệu

Cập nhật dữ liệu trong CachedRowSet

// Chỉ định cột và dữ liệu được cập nhật
crs.updateDatatype(int columnIndex, Datatype x);

//...

crs.updateRow();
crs.acceptChanges(); //submit

Xoá dữ liệu trong CachedRowSet trong Java

//Xoá dữ liệu của dòng hiện tại
crs.deleteRow();
crs.acceptChanges();

Xem dữ liệu trong CachedRowSet

CachedRowSet cho phép chúng ta duyệt các dữ liệu với các thao tác First (bản ghi đầu tiên), Next (bản ghi kế tiếp), Previous (bản ghi trước) và Last (bản ghi cuối cùng). Bên dưới là các phương thức tương ứng với từng bản ghi.

Hiển thị bản ghi đầu tiên

crs.beforeFirst();

if(crs.next()) {
   crs.getDatatype(String columnLabel);
}

Hiển thị bản ghi kế tiếp ( Chúng ta sử dụng phương thức crs.isLast() để kiểm tra xem đang là bản ghi  cuối cùng chưa. Nếu trả về true thì dữ liệu đang ở bản ghi cuối cùng)

if(crs.next()) {
   crs.getDatatype(String columnLabel);
}

Hiển thị bản ghi trước (Chúng ta sử dụng phương thức crs.isFirst() để kiểm tra xem đang là bản ghi đầu tiên chưa. Nếu trả về true thì dữ liệu đang ở đầu bản ghi đầu tiên)

if(crs.previous()) {
   crs.getDatatype(String columnLabel);
}

Hiển thị bản ghi cuối cùng

crs.afterLast();

if(crs.previous()) {
   crs.getDatatype(String columnLabel);
}

Jdbcrowset trong java – Bài thực hành số 1

Cho câu lệnh tạo cơ sở dữ liệu và tạo bảng

CREATE DATABASE [StudentDB]

go

use StudentDB

go

CREATE TABLE [dbo].[Class](
 [Class_ID] [varchar](20) PRIMARY KEY,
 [Class_Name] [nvarchar](50) NULL,
)

go

CREATE TABLE [dbo].[Student](
 [Student_ID] [varchar](20) PRIMARY KEY,
 [Student_Name] [nvarchar](100) NULL,
 [Sex] [nvarchar](10) NULL,
 [Class_ID] [varchar](20) NULL,
)

Câu 1: Chương trình quản lý thông tin của lớp học

Thiết kế giao diện

Thiết kế giao diện

Viết xử lý

Trường hợp đang focus tại “Class Name” thì người dùng có thể nhấn phím Enter để thực hiện chức năng “Display”

Khi người dùng chọn nút lệnh “Delete”, chương trình sẽ hiển thị thông báo xác nhận xóa thông tin

Viết xử lý

Trường hợp chọn “Yes”, chương trình sẽ kiểm tra xem lớp học này đã có sinh viên chưa. Nếu lớp học đã có sinh viên đăng ký học thì chương trình sẽ hiển thị thông báo

Jdbcrowset trong java

Khi chọn một dòng trong JTable, chương trình sẽ hiển thị sỉ số sinh viên của lớp học đó tại “Number of students”

Yêu cầu tạo 2 procedure

Một procedure kiểm tra xem lớp học đã có sinh viên đăng ký học chưa và một procedure hiển thị sỉ số sinh viên của lớp học.

Câu 2: Chương trình xem, thêm, xóa và cập nhật sinh viên

Jdbcrowset trong java

Viết xử lý JDBCRowset trong Java

Lần hiển thị đầu tiên: các đối tượng không thể thao tác là  ID, Name, Sex và Class

Viết xử lý

Khi người dùng chọn nút lệnh “First”: hiển thị thông tin đầu tiên, các nút lệnh như “Update”, “Delete”, “Next” và “Last” ở trạng thái enable. Nút lệnh “First” ở trạng thái Disable.  Hiển thị số record hiện hành và tổng số của record hiện có.

Jdbcrowset trong java

Khi người dùng chọn nút lệnh “Next”: sẽ hiển thị thông tin kế tiếp, các nút lệnh “First”, “Previous” ở trạng thái enable. Đồng thời kiểm tra nếu đang ở record cuối cùng thì thiết lập trạng thái cho các nút lệnh “Next” và Last” là disable.

Jdbcrowset trong java

Khi người dùng chọn nút lệnh “Previous”: hiển thị các thông tin trước đó, đồng thời kiểm tra nếu đang ở record đầu tiên thì thiết lập trạng thái cho các nút lệnh như “First” và “Previous” là disable

Khi người dùng chọn nút lệnh “Last”: hiển thị các thông tin cuối cùng, các nút lệnh như “First”, “Previous” ở trạng thái Enable, nút lệnh “Last” ở trạng thái disable.

Khi người dùng chọn nút lệnh “Update”, cho phép nhập các thông tin như ID, Name và chọn thông tin về Sex, Class và khi người dùng chọn nút lệnh “Save”, chương trình sẽ tiến hành cập nhật thông tin

Jdbcrowset trong java

Khi người dùng chọn nút lệnh “Insert”, chương trình cho phép người dùng nhập thông tin và thêm vào cơ sở dữ liệu khi người dùng chọn nút “Save” là hoàn tất JDBCRowset trong Java.

Jdbcrowset trong java

Jdbcrowset trong java – JoinRowSet

JoinRowSet được sử dụng để kết nối nhiều RowSet với nhau trong database. Sử dụng JoinRowSet giống như việc kết nối giữa 2 bảng trong database phải thông qua điều kiện kết nối với mục đích truy vấn dữ liệu từ nhiều bảng.

Ví dụ chúng ta có 2 bảng là Class và Students. Hai bảng này liên kết với nhau thông qua khóa ngoại là ClassID. Trong trường hợp này chúng ta sẽ có 2 RowSet bao gồm một cho bảng Class và một cho bảng Students. Bây giờ chúng ta sẽ thực hiện kết nối 2 RowSet này sử dụng JoinRowSet để có được thông tin của lớp học và sinh viên.

Jdbcrowset trong java

Tạo JoinRowSet

<JoinRowSet jrs = new JoinRowSetImpl();?

Sử dụng phương thức addRowSet(Rowset, “Column name in database”) để kết nối 2 RowSet dựa vào khóa ngoại (column)

Jdbcrowset trong java – FilteredRowSet

FilteredRowSet được sử dụng để lấy về các tập giá trị từ RowSet dựa vào điều kiện lọc tương tự như mệnh đề where trong câu lệnh Select.

FilteredRowSet frs = new FilteredRowSetImpl();

Jdbcrowset trong java – Ví dụ JoinRowSet

package swing_pkg.sql.jdbcrowset;

import com.sun.rowset.CachedRowSetImpl;
import com.sun.rowset.JoinRowSetImpl;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Vector;
import javax.sql.rowset.CachedRowSet;
import javax.sql.rowset.JoinRowSet;
import javax.swing.DefaultListModel;

/**
 *
 * @author giasutinhoc.vn
 */

public class JoinRowSetConsoleExample {

 private CachedRowSet crClass, crStudent;
 private PreparedStatement ps;
 private Connection c;

 //Column name in database
 private static final String CLASS_ID = "class_id";

 public JoinRowSetConsoleExample() {
   getClassInfo();
   getStudentInfo();
 }

private String getStringUrl() {
   return "jdbc:sqlserver://localhost;databasename=StudentDB";
 }

private void getClassInfo() {
  try {
    String sql = "Select * from class";

    crClass = new CachedRowSetImpl();

    crClass.setUrl(getStringUrl());
    crClass.setUsername("sa");
    crClass.setPassword("sa");
    crClass.setCommand(sql);

    crClass.execute();
  } catch (Exception e) {
    e.printStackTrace();
  }
}

private void getStudentInfo() {
 try {

   String sql = "Select * from student";

   crStudent = new CachedRowSetImpl();

   crStudent.setUrl(getStringUrl());
   crStudent.setUsername("sa");
   crStudent.setPassword("sa");
   crStudent.setCommand(sql);

   crStudent.execute();
 } catch (Exception e) {
   e.printStackTrace();
 }
}

private void getStudentBaseClassId() {
 try {

   JoinRowSet jrs = new JoinRowSetImpl();

   jrs.addRowSet(crClass, CLASS_ID);
   jrs.addRowSet(crStudent, CLASS_ID);

   while(jrs.next()) {
    System.out.print("ID: "+ jrs.getString("student_id"));
    System.out.print(", Name: " + jrs.getString("student_name"));
    System.out.print(", Sex:" + jrs.getString("sex"));
    System.out.println(", Class: " + jrs.getString("class_name"));
  }
 } catch (Exception ex) {
   ex.printStackTrace();
 }
}

public static void main(String args[]) {
  JoinRowSetConsoleExample jrsce = new JoinRowSetConsoleExample();
  jrsce.getStudentBaseClassId();
 }
}

Kết quả hiển thị

Kết quả hiển thị

Jdbc rowset trong java – Sử dụng FilteredRowSet

Các bước thực hiện

Bước 1: Tạo class cài đặt giao diện Predicate

package swing_pkg.sql.jdbcrowset;

import java.sql.SQLException;
import javax.sql.RowSet;
import javax.sql.rowset.Predicate;

/**
 *
 * @author giasutinhoc.vn
 */
public class ClassName implements Predicate {

 //Danh sách tham số dùng để filter
 private Datatype paramName;

 public ClassName(Danh sách tham số) {
   //Gán giá trị cho các tham số
 }

 @Override
 public boolean evaluate(RowSet rs) {
  try {

    if(input your condition)
      return true;
 } catch (SQLException ex) {
    ex.printStackTrace();
 }
 
 return false;
}

 @Override
 public boolean evaluate(Object value, int column) throws SQLException {
   throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
 }

 @Override
 public boolean evaluate(Object value, String columnName) throws SQLException {
   throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
 }
}

Bước 2: Tạo đối tượng FilteredRowSet, thiết lập filter và duyệt

// Tạo đối tượng
FilteredRowSet frs = new FilteredRowSetImpl();

// Thiết lập fiter
frs.populate(jrs);

ClassName cr = new ClassName(argument list for condition);
frs.setFilter(cr);

//Duyệt
while (frs.next()) {
  // Lấy giá trị
  frs.getDatatype("columnName");
}

Ví dụ sử dụng FilteredRowSet

JoinRowSet jrs = new JoinRowSetImpl();

jrs.addRowSet(crClass, "class_id");
jrs.addRowSet(crStudent, "class_id");

//Lọc dữ liệu*******************
FilteredRowSet frs = new FilteredRowSetImpl();

frs.populate(jrs);
ClassPredicateImpl cr = new ClassPredicateImpl(classId);
frs.setFilter(cr);

//Duyệt
while (frs.next()) {
 System.out.println(frs.getString("student_id"));

 //...
}

Jdbcrowset trong java – Bài thực hành số 2 

Câu 1: Cho giao diện chương trình như hình ảnh bên dưới – JDBCRowset trong Java

Jdbcrowset trong java

Viết xử lý

Class info: Sẽ hiển thị tất cả thông tin của bảng Class; Student info: hiển thị tất cả các thông tin của bảng Student; Display a list of students by class: hiển thị thông tin của bảng Student và bảng Class.

Gợi ý: Chúng ta có thể sử dụng CachedRowSet và JoinRowSet

Câu 2: Cho giao diện chương trình như hình ảnh bên dưới

Jdbcrowset trong java

Viết xử lý: Hiển thị thông tin sinh viên dựa vào mã lớp học (class_id) được chọn tại list

Gợi ý: Sử dụng FilteredRowSet

Kết luận

Như vậy, qua bài viết về JDBCRowset trong Java trên đây, R2S chúng tôi đã giúp bạn hiểu được về CachedRowSet, JdbcRowSet, WebRowSet, JoinRowSet, FilteredRowSet, cách sử dụng filteredrowset.

Đừng quên bỏ lỡ bất cứ bài viết nào của chúng tôi để học thêm nhiều kiến thức hữu ích về lập trình java nhé.

Bài viết gốc được đăng tải tại giasutinhoc.vn

Alert: You are not allowed to copy content or view source !!