使用多个结果集

下载 JDBC 驱动程序

使用返回多个结果集的内联 SQL 或 SQL Server 存储过程时,Microsoft JDBC Driver for SQL Server 提供 SQLServerStatement 类的 getResultSet 方法,以检索返回的每个数据集。 此外,当运行返回多个结果集的语句时,可以使用 SQLServerStatement 类的 execute 方法,因为它将返回一个布尔值,该值指示返回的值是结果集还是更新计数

如果 execute 方法返回 true,则运行的语句已返回了一个或多个结果集。 通过调用 getResultSet 方法可以访问第一个结果集。 若要确定是否提供了多个结果集,可以调用 getMoreResults 方法,如果提供了多个结果集,则该方法返回布尔值 true。 如果有多个结果集可用,则可以再次调用 getResultSet 方法进行访问,继续使用这个过程直到所有的结果集都得到处理。 如果 getMoreResults 方法返回 false,则没有多个结果集要处理。

如果 execute 方法返回 false,则所运行的语句返回了更新计数值,可以通过调用 getUpdateCount 方法检索此值

注意

有关更新计数的详细信息,请参阅使用带有更新计数的存储过程

在下面的示例中,将向此函数传递 AdventureWorks2022 示例数据库的开放式连接,并构造一条 SQL 语句,该语句在运行后将返回两个结果集:

public static void executeStatement(Connection con) {
    try (Statement stmt = con.createStatement();) {
        String SQL = "SELECT TOP 10 * FROM Person.Contact; SELECT TOP 20 * FROM Person.Contact";

        boolean results = stmt.execute(SQL);
        int rsCount = 0;

        // Loop through the available result sets.
        do {
            if (results) {
                ResultSet rs = stmt.getResultSet();
                rsCount++;

                // Show data from the result set.
                System.out.println("RESULT SET #" + rsCount);
                while (rs.next()) {
                    System.out.println(rs.getString("LastName") + ", " + rs.getString("FirstName"));
                }
            }
            System.out.println();
            results = stmt.getMoreResults();
        } while (results);
    }
    // Handle any errors that may have occurred.
    catch (SQLException e) {
        e.printStackTrace();
    }
}

在这种情况下,返回的结果集的数目为 2。 但是,如此编写代码是为了在返回了未知数目的结果集时,例如在调用存储过程时,这些结果集也会全部得到处理。 若要查看返回多个结果集以及更新值的存储过程的调用示例,请参阅处理复杂语句

注意

调用 SQLServerStatement 类的 getMoreResults 方法时,会隐式关闭以前返回的结果集。

另请参阅

通过 JDBC 驱动程序使用语句