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://127.0.0.1/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://127.0.0.1/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+ 次浏览

启动您的职业生涯

通过完成课程获得认证

开始
广告