Có hai loại result set: forward only và bidirectional.
Forward only ResultSet: ResultSet object có con trỏ chỉ di chuyển một chiều. Mặc định JDBC result sets là forward-only.
Di chuyển con trỏ forward only ResultSets bằng phương thức next() của interface ResultSet. Di chuyển con trỏ sang hàng tiếp theo từ vị trí hiện tại. Trả về boolean: false nếu không còn hàng, true nếu có. Dùng trong while để lặp:
while(rs.next()){ }
Ví dụ
Giả sử bảng dataset:
+--------------+-----------+ | mobile_brand | unit_sale | +--------------+-----------+ | Iphone | 3000 | | Samsung | 4000 | | Nokia | 5000 | | Vivo | 1500 | +--------------+-----------+
Chương trình truy xuất tất cả bản ghi bảng Dataset:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class RetrievingData {
public static void main(String args[]) throws Exception {
// Đăng ký Driver
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
// Lấy kết nối
String mysqlUrl = "jdbc:mysql://localhost/TestDB";
Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
System.out.println("Kết nối thành công......");
// Tạo Statement
Statement stmt = con.createStatement();
// Truy xuất dữ liệu
ResultSet rs = stmt.executeQuery("select * from Dataset");
System.out.println("Nội dung bảng");
while(rs.next()) {
System.out.print("Brand: " + rs.getString("Mobile_Brand") + ", ");
System.out.print("Sale: " + rs.getString("Unit_Sale"));
System.out.println("");
}
}
}
Kết quả
Kết nối thành công...... Nội dung bảng Brand: Iphone, Sale: 3000 Brand: Samsung, Sale: 4000 Brand: Nokia, Sale: 5000 Brand: Vivo, Sale: 1500
Bidirectional ResultSet: ResultSet bi-directional có con trỏ di chuyển cả tiến và lùi.
Phương thức createStatement() của Connection interface có biến thể chấp nhận hai giá trị nguyên đại diện cho result set type và concurrency type:
Statement createStatement(int resultSetType, int resultSetConcurrency)
Để tạo bi-directional result set, truyền type là ResultSet.TYPE_SCROLL_SENSITIVE hoặc ResultSet.TYPE_SCROLL_INSENSITIVE, kèm concurrency:
// Tạo Statement object Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
Ví dụ
Ví dụ tạo bi-directional ResultSet. Tạo object bi-directional lấy dữ liệu từ bảng dataset, in hàng từ cuối lên đầu dùng previous():
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class BidirectionalResultSet {
public static void main(String args[]) throws Exception {
// Đăng ký Driver
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
// Lấy kết nối
String mysqlUrl = "jdbc:mysql://localhost/TestDB";
Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
System.out.println("Kết nối thành công......");
// Tạo Statement object
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
// Truy xuất dữ liệu
ResultSet rs = stmt.executeQuery("select * from Dataset");
rs.afterLast();
System.out.println("Nội dung bảng");
while(rs.previous()) {
System.out.print("Brand: " + rs.getString("Mobile_Brand") + ", ");
System.out.print("Sale: " + rs.getString("Unit_Sale"));
System.out.println("");
}
}
}
Kết quả
Kết nối thành công...... Nội dung bảng Brand: Vivo, Sale: 1500 Brand: Nokia, Sale: 5000 Brand: Samsung, Sale: 4000 Brand: IPhone, Sale: 3000