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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP