Share via


複数の結果セットの使用

JDBC ドライバーのダウンロード

複数の結果セットを返すインライン SQL または SQL Server ストアド プロシージャを処理する場合、返される各データのセットを取得するために、Microsoft JDBC Driver for SQL Server は SQLServerStatement クラスの getResultSet メソッドを提供します。 また、複数の結果セットを返すステートメントの実行時には、SQLServerStatement クラスの execute メソッドを使用できます。これは、返される値が結果セットと更新数のどちらであるかを示す boolean 値を返せるためです。

execute メソッドから true が返された場合、実行されたステートメントから返されるのは 1 つ以上の結果セットです。 最初の結果セットには、getResultSet メソッドを呼び出すことでアクセスできます。 他にも使用可能な結果セットがあるかどうかを判断するには、getMoreResults メソッドを呼び出すことができます。このメソッドでは、他にも使用可能な結果セットがある場合、boolean 値として true が返されます。 他にも結果セットが使用可能な場合は、getResultSet メソッドを再度呼び出して結果セットにアクセスし、すべての結果セットが処理されるまで続けます。 getMoreResults メソッドから false が返された場合は、処理対象となる結果セットがなくなったことを意味します。

execute メソッドから false が返された場合、実行されたステートメントから返されるのは更新数の値です。更新数の値は、getUpdateCount メソッドを呼び出すことで取得できます。

Note

更新数の詳細については、「更新数があるストアド プロシージャの使用」を参照してください。

次の例の関数は、AdventureWorks2022 サンプル データベースに対して開かれた接続を渡され、実行すると 2 つの結果セットを返す 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 であることがわかっています。 ただし、ストアド プロシージャを呼び出す場合のように、返される結果セット数が不明でも、すべての結果セットが処理されるようにコードが作成されています。 複数の結果セットと更新数を返すストアド プロシージャを呼び出す例については、「複雑なステートメントの処理」を参照してください。

Note

SQLServerStatement クラスの getMoreResults メソッドを呼び出すと、前に返された結果セットは暗黙的に閉じられます。

関連項目

JDBC ドライバーでのステートメントの使用