JDBC 中有多少種結果集?它們是什麼?


結果集共有兩種型別:僅向前和雙向。

僅向前結果集:遊標只能單向移動的結果集物件稱為僅向前結果集。預設情況下,JDBC 結果集是僅向前結果集。

您可以使用 ResultSet 介面的 **next()** 方法移動僅向前**結果集**的遊標。它將指標從當前位置移動到下一行。此方法返回布林值。如果其當前位置的下一行沒有行,則返回 false,否則返回 true。

因此,在 while 迴圈中使用此方法,您可以迭代 ResultSet 物件的內容。

while(rs.next()){
}

示例

假設我們有一個名為 dataset 的表,其內容如下所示(此處應插入表示例)

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

以下示例檢索 **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 {
      //Registering the Driver
      DriverManager.registerDriver(new com.mysql.jdbc.Driver());
      //Getting the connection
      String mysqlUrl = "jdbc:mysql:///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("");
      }
   }
}

輸出(此處應插入輸出示例)

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

雙向結果集:雙向結果集物件是指其遊標可以向前和向後移動的結果集物件。

Connection 介面的 createStatement() 方法有一個變體,它接受兩個整數值,分別表示結果集型別和併發型別。

Statement createStatement(int resultSetType, int resultSetConcurrency)

要建立雙向結果集,您需要將型別作為 ResultSet.TYPE_SCROLL_SENSITIVE 或 ResultSet.TYPE_SCROLL_INSENSITIVE 傳遞給此方法,以及併發性,如下所示:(此處應插入程式碼示例)

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

示例

以下示例演示了雙向結果集的建立。這裡我們嘗試建立一個雙向結果集物件,它從名為 dataset 的表中檢索資料,並且我們嘗試使用 **previous()** 方法從後往前列印 dataset 表的行。(此處應插入程式碼示例)

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:///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("");
      }
   }
}

輸出(此處應插入輸出示例)

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

更新於:2019年7月30日

4K+ 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.