MySQL JDBC有几种类型的结果集?它们是什么?

MySQL JDBC有几种类型的结果集?它们是什么?

有两种类型的结果集,即仅向前和双向的。

仅向前的ResultSet: 光标仅能向一个方向移动的ResultSet对象被称为“仅向前的ResultSet”。默认情况下,JDBC结果集是仅向前的结果集。

您可以使用ResultSet接口的next()方法来移动仅向前的ResultSets的光标。它会将指针从当前位置移动到下一行。此方法返回一个布尔值。如果在其当前位置没有下一行,则返回false,否则返回true。

因此,在while循环中使用此方法,您可以迭代ResultSet对象的内容。

while(rs.next()){
}

阅读更多:MySQL 教程

例子

假设我们有一个名为“dataset”的表,内容如下所示:

+--------------+-----------+
| 手机品牌 | 销售单位 |
+--------------+-----------+
| 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 {
      //注册驱动程序
      DriverManager.registerDriver(new com.mysql.jdbc.Driver());
      //获取连接
      String mysqlUrl = "jdbc:mysql://localhost/TestDB";
      Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
      System.out.println("已建立连接......");
      //创建Statement对象
      Statement stmt = con.createStatement();
      //检索数据
      ResultSet rs = stmt.executeQuery("从Dataset中选择*");
      System.out.println("表的内容");
      while(rs.next()) {
         System.out.print("品牌: "+rs.getString("Mobile_Brand")+", ");
         System.out.print("销售额: "+rs.getString("Unit_Sale"));
         System.out.println("");
      }
   }
}

输出

已建立连接......
表的内容
品牌:Iphone,销售额:3000
品牌:Samsung,销售额:4000
品牌:Nokia,销售额:5000
品牌:Vivo,销售额:1500

双向ResultSet: 双向ResultSet对象是光标向前和向后移动的ResultSet对象。

Connection接口的createStatement()方法有一个变体,它接受两个整数值,表示结果集类型和并发类型。

Statement createStatement(int resultSetType, int resultSetConcurrency)

要创建双向结果集,您需要将ResultSet.TYPE_SCROLL_SENSITIVE或ResultSet.TYPE_SCROLL_INSENSITIVE作为类型与并发一起传递给此方法:

//创建Statement对象
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);

例子

以下示例演示了如何创建双向ResultSet。在这里,我们尝试创建一个双向ResultSet对象,它从名为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 {
        // 注册驱动程序
        DriverManager.registerDriver(new com.mysql.jdbc.Driver());
        // 获取连接
        String mysqlUrl = "jdbc:mysql://localhost/TestDB";
        Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
        System.out.println("连接已建立......");
        // 创建一个声明对象
        Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
        ResultSet.CONCUR_UPDATABLE);
        // 检索数据
        ResultSet rs = stmt.executeQuery("select * from Dataset");
        rs.afterLast();
        System.out.println("表的内容");
        while(rs.previous()) {
            System.out.print("品牌: "+rs.getString("Mobile_Brand")+", ");
            System.out.print("销售量: "+rs.getString("Unit_Sale"));
            System.out.println("");
        }
    }
}

输出

连接已建立......
表的内容
品牌: Vivo, 销售量: 1500
品牌: Nokia, 销售量: 5000
品牌: Samsung, 销售量: 4000
品牌: IPhone, 销售量: 3000

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程