Computer >> Máy Tính >  >> Lập trình >> MySQL

Có bao nhiêu loại Bộ kết quả trong JDBC Chúng là gì?

Có hai loại tập hợp kết quả cụ thể là, chỉ chuyển tiếp và hai chiều.

Chỉ chuyển tiếp ResultSet: Đối tượng ResultSet có con trỏ chỉ di chuyển theo một hướng được gọi là chỉ chuyển tiếp ResultSet. Theo mặc định, tập kết quả JDBC là tập kết quả chỉ chuyển tiếp.

Bạn chỉ có thể di chuyển con trỏ của Bộ kết quả chuyển tiếp bằng cách sử dụng tiếp theo () của giao diện ResultSet. Nó di chuyển con trỏ đến hàng tiếp theo từ vị trí hiện tại. Phương thức này trả về một giá trị boolean. Nếu không có hàng nào bên cạnh vị trí hiện tại của nó, nó trả về false, nếu không, nó trả về true.

Do đó, sử dụng phương pháp này trong vòng lặp while, bạn có thể lặp lại nội dung của đối tượng ResultSet.

while(rs.next()){
}

Ví dụ

Giả sử chúng ta có một bảng có tên là tập dữ liệu với nội dung như hình dưới đây:

+--------------+-----------+
| mobile_brand | unit_sale |
+--------------+-----------+
| Iphone       |      3000 |
| Samsung      |      4000 |
| Nokia        |      5000 |
| Vivo         |      1500 |
+--------------+-----------+

Ví dụ sau truy xuất tất cả các bản ghi của Tập dữ liệu bảng và in kết quả:

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 {
      //Registering the Driver
      DriverManager.registerDriver(new com.mysql.jdbc.Driver());
      //Getting the connection
      String mysqlUrl = "jdbc:mysql://localhost/TestDB";
      Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
      System.out.println("Connection established......");
      //Creating a Statement object
      Statement stmt = con.createStatement();
      //Retrieving the data
      ResultSet rs = stmt.executeQuery("select * from Dataset");
      System.out.println("Contents of the table");
      while(rs.next()) {
         System.out.print("Brand: "+rs.getString("Mobile_Brand")+", ");
         System.out.print("Sale: "+rs.getString("Unit_Sale"));
         System.out.println("");
      }
   }
}

Đầu ra

Connection established......
Contents of the table
Brand: Iphone, Sale: 3000
Brand: Samsung, Sale: 4000
Brand: Nokia, Sale: 5000
Brand: Vivo, Sale: 1500

Bộ kết quả hai chiều: Đối tượng ResultSet hai hướng là đối tượng có con trỏ di chuyển theo cả hướng tiến và lùi.

Phương thức createStatement () của giao diện Kết nối có một biến thể chấp nhận hai giá trị nguyên đại diện cho kiểu tập hợp kết quả và kiểu đồng thời.

Statement createStatement(int resultSetType, int resultSetConcurrency)

Để tạo tập hợp kết quả hai chiều, bạn cần chuyển loại là ResultSet.TYPE_SCROLL_SENSITIVE hoặc ResultSet.TYPE_SCROLL_INSENSITIVE, cùng với đồng thời, cho phương thức này dưới dạng:

//Creating a Statement object
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);

Ví dụ

Ví dụ sau minh họa việc tạo ResultSet hai hướng. Ở đây, chúng tôi đang cố gắng tạo đối tượng ResultSet hai hướng truy xuất dữ liệu từ tập dữ liệu tên bảng và chúng tôi đang cố gắng in các hàng của bảng tập dữ liệu từ cuối cùng đến đầu tiên bằng cách sử dụng trước đó () phương pháp.

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 {
      //Registering the Driver
      DriverManager.registerDriver(new com.mysql.jdbc.Driver());
      //Getting the connection
      String mysqlUrl = "jdbc:mysql://localhost/TestDB";
      Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
      System.out.println("Connection established......");
      //Creating a Statement object
      Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
      ResultSet.CONCUR_UPDATABLE);
      //Retrieving the data
      ResultSet rs = stmt.executeQuery("select * from Dataset");
      rs.afterLast();
      System.out.println("Contents of the table");
      while(rs.previous()) {
         System.out.print("Brand: "+rs.getString("Mobile_Brand")+", ");
         System.out.print("Sale: "+rs.getString("Unit_Sale"));
         System.out.println("");
      }
   }
}

Đầu ra

Connection established......
Contents of the table
Brand: Vivo, Sale: 1500
Brand: Nokia, Sale: 5000
Brand: Samsung, Sale: 4000
Brand: IPhone, Sale: 3000