JDBC - Bộ kết quả

Các câu lệnh SQL đọc dữ liệu từ một truy vấn cơ sở dữ liệu, trả về dữ liệu trong một tập kết quả. Câu lệnh SELECT là cách tiêu chuẩn để chọn các hàng từ cơ sở dữ liệu và xem chúng trong một tập kết quả. Các java.sql.ResultSet giao diện đại diện cho tập kết quả của một truy vấn cơ sở dữ liệu.

Đối tượng ResultSet duy trì một con trỏ trỏ đến hàng hiện tại trong tập kết quả. Thuật ngữ "tập kết quả" đề cập đến dữ liệu hàng và cột có trong đối tượng ResultSet.

Các phương thức của giao diện ResultSet có thể được chia thành ba loại:

  • Navigational methods: Được sử dụng để di chuyển con trỏ xung quanh.

  • Get methods: Được sử dụng để xem dữ liệu trong các cột của hàng hiện tại được trỏ bởi con trỏ.

  • Update methods:Được sử dụng để cập nhật dữ liệu trong các cột của hàng hiện tại. Các bản cập nhật sau đó cũng có thể được cập nhật trong cơ sở dữ liệu cơ bản.

Con trỏ có thể di chuyển dựa trên các thuộc tính của ResultSet. Các thuộc tính này được chỉ định khi Câu lệnh tương ứng tạo Tập kết quả được tạo.

JDBC cung cấp các phương thức kết nối sau để tạo các câu lệnh với ResultSet mong muốn:

  • createStatement(int RSType, int RSConcurrency);

  • prepareStatement(String SQL, int RSType, int RSConcurrency);

  • prepareCall(String sql, int RSType, int RSConcurrency);

Đối số đầu tiên cho biết kiểu của đối tượng ResultSet và đối số thứ hai là một trong hai hằng số ResultSet để chỉ định xem tập kết quả là chỉ đọc hay có thể cập nhật.

Loại kết quả

RSType khả thi được đưa ra bên dưới. Nếu bạn không chỉ định bất kỳ loại ResultSet nào, bạn sẽ tự động nhận được một loại là TYPE_FORWARD_ONLY.

Kiểu Sự miêu tả
ResultSet.TYPE_FORWARD_ONLY Con trỏ chỉ có thể di chuyển về phía trước trong tập kết quả.
ResultSet.TYPE_SCROLL_INSENSITIVE Con trỏ có thể cuộn tới và lùi, và tập kết quả không nhạy cảm với những thay đổi do người khác thực hiện đối với cơ sở dữ liệu xảy ra sau khi tập kết quả được tạo.
ResultSet.TYPE_SCROLL_SENSITIVE. Con trỏ có thể cuộn tới và lui, và tập kết quả nhạy cảm với những thay đổi do người khác thực hiện đối với cơ sở dữ liệu xảy ra sau khi tập kết quả được tạo.

Đồng thời của ResultSet

Các loại tiền tệ RSConcurrency có thể được đưa ra bên dưới. Nếu bạn không chỉ định bất kỳ loại Đồng tiền nào, bạn sẽ tự động nhận được một loại là CONCUR_READ_ONLY.

Đồng tiền Sự miêu tả
ResultSet.CONCUR_READ_ONLY Tạo tập hợp kết quả chỉ đọc. Đây là mặc định
ResultSet.CONCUR_UPDATABLE Tạo tập kết quả có thể cập nhật.

Tất cả các ví dụ của chúng tôi đã viết cho đến nay có thể được viết như sau, khởi tạo đối tượng Statement để tạo đối tượng ResultSet chỉ chuyển tiếp, chỉ đọc -

try {
   Statement stmt = conn.createStatement(
                           ResultSet.TYPE_FORWARD_ONLY,
                           ResultSet.CONCUR_READ_ONLY);
}
catch(Exception ex) {
   ....
}
finally {
   ....
}

Điều hướng Tập hợp Kết quả

Có một số phương pháp trong giao diện ResultSet liên quan đến việc di chuyển con trỏ, bao gồm:

SN Phương pháp & Mô tả
1 public void beforeFirst() throws SQLException

Di chuyển con trỏ ngay trước hàng đầu tiên.

2 public void afterLast() throws SQLException

Di chuyển con trỏ ngay sau hàng cuối cùng.

3 public boolean first() throws SQLException

Di chuyển con trỏ đến hàng đầu tiên.

4 public void last() throws SQLException

Di chuyển con trỏ đến hàng cuối cùng.

5 public boolean absolute(int row) throws SQLException

Di chuyển con trỏ đến hàng được chỉ định.

6 public boolean relative(int row) throws SQLException

Di chuyển con trỏ đến một số hàng nhất định về phía trước hoặc phía sau, từ vị trí nó hiện đang trỏ.

7 public boolean previous() throws SQLException

Di chuyển con trỏ đến hàng trước đó. Phương thức này trả về false nếu hàng trước đó nằm ngoài tập kết quả.

số 8 public boolean next() throws SQLException

Di chuyển con trỏ đến hàng tiếp theo. Phương thức này trả về false nếu không còn hàng nào trong tập kết quả.

9 public int getRow() throws SQLException

Trả về số hàng mà con trỏ đang trỏ đến.

10 public void moveToInsertRow() throws SQLException

Di chuyển con trỏ đến một hàng đặc biệt trong tập kết quả có thể được sử dụng để chèn một hàng mới vào cơ sở dữ liệu. Vị trí con trỏ hiện tại được ghi nhớ.

11 public void moveToCurrentRow() throws SQLException

Di chuyển con trỏ trở lại hàng hiện tại nếu con trỏ hiện đang ở hàng chèn; nếu không, phương pháp này không làm gì cả

Để hiểu rõ hơn, chúng ta hãy nghiên cứu Điều hướng - Mã ví dụ .

Xem tập hợp kết quả

Giao diện ResultSet chứa hàng tá phương thức để lấy dữ liệu của hàng hiện tại.

Có một phương thức get cho mỗi kiểu dữ liệu có thể có và mỗi phương thức get có hai phiên bản -

  • Một cái có tên cột.

  • Một trong đó có một chỉ mục cột.

Ví dụ: nếu cột bạn muốn xem có chứa int, bạn cần sử dụng một trong các phương thức getInt () của ResultSet -

SN Phương pháp & Mô tả
1 public int getInt(String columnName) throws SQLException

Trả về giá trị int trong hàng hiện tại trong cột có tên columnName.

2 public int getInt(int columnIndex) throws SQLException

Trả về giá trị int trong hàng hiện tại trong chỉ mục cột đã chỉ định. Chỉ số cột bắt đầu từ 1, nghĩa là cột đầu tiên của hàng là 1, cột thứ hai của hàng là 2, v.v.

Tương tự, có các phương thức get trong giao diện ResultSet cho từng loại trong số tám kiểu nguyên thủy Java, cũng như các kiểu phổ biến như java.lang.String, java.lang.Object và java.net.URL.

Ngoài ra còn có các phương pháp để lấy các kiểu dữ liệu SQL java.sql.Date, java.sql.Time, java.sql.TimeStamp, java.sql.Clob và java.sql.Blob. Kiểm tra tài liệu để biết thêm thông tin về cách sử dụng các kiểu dữ liệu SQL này.

Để hiểu rõ hơn, chúng ta hãy nghiên cứu Chế độ xem - Mã ví dụ .

Cập nhật tập hợp kết quả

Giao diện ResultSet chứa một tập hợp các phương pháp cập nhật để cập nhật dữ liệu của tập kết quả.

Như với các phương thức get, có hai phương pháp cập nhật cho mỗi kiểu dữ liệu:

  • Một cái có tên cột.

  • Một trong đó có một chỉ mục cột.

Ví dụ: để cập nhật cột Chuỗi của hàng hiện tại của tập kết quả, bạn sẽ sử dụng một trong các phương thức updateString () sau:

SN Phương pháp & Mô tả
1 public void updateString(int columnIndex, String s) throws SQLException

Thay đổi Chuỗi trong cột được chỉ định thành giá trị của s.

2 public void updateString(String columnName, String s) throws SQLException

Tương tự như phương pháp trước, ngoại trừ cột được chỉ định bằng tên thay vì chỉ mục của nó.

Có các phương pháp cập nhật cho tám kiểu dữ liệu nguyên thủy, cũng như kiểu dữ liệu Chuỗi, Đối tượng, URL và SQL trong gói java.sql.

Cập nhật một hàng trong tập hợp kết quả thay đổi các cột của hàng hiện tại trong đối tượng ResultSet, nhưng không thay đổi trong cơ sở dữ liệu bên dưới. Để cập nhật các thay đổi của bạn đối với hàng trong cơ sở dữ liệu, bạn cần gọi một trong các phương pháp sau.

SN Phương pháp & Mô tả
1 public void updateRow()

Cập nhật hàng hiện tại bằng cách cập nhật hàng tương ứng trong cơ sở dữ liệu.

2 public void deleteRow()

Xóa hàng hiện tại khỏi cơ sở dữ liệu

3 public void refreshRow()

Làm mới dữ liệu trong tập kết quả để phản ánh mọi thay đổi gần đây trong cơ sở dữ liệu.

4 public void cancelRowUpdates()

Hủy mọi cập nhật được thực hiện trên hàng hiện tại.

5 public void insertRow()

Chèn một hàng vào cơ sở dữ liệu. Phương thức này chỉ có thể được gọi khi con trỏ trỏ đến hàng chèn.

Để hiểu rõ hơn, chúng ta hãy nghiên cứu Cập nhật - Mã ví dụ .