次の方法で共有


複数の結果セットの使用

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

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

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

注意

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

次の例では、SQL Server AdventureWorks サンプル データベースに対して開いている接続が関数に渡され、実行時に 2 つの結果セットを返す SQL ステートメントが作成されています。

public static void executeStatement(Connection con) {
   try {
      String SQL = "SELECT TOP 10 * FROM Person.Contact; _" +
                   "SELECT TOP 20 * FROM Person.Contact";
      Statement stmt = con.createStatement();
      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"));
           }
           rs.close();
        }
        System.out.println();
        results = stmt.getMoreResults();
        } while(results);
      stmt.close();
      }
   catch (Exception e) {
      e.printStackTrace();
   }
}

この例では、返される結果セット数は 2 であることがわかっています。 ただし、ストアド プロシージャを呼び出す場合のように、返される結果セット数が不明でも、すべての結果セットが処理されるようにコードが作成されています。 複数の結果セットと更新数を返すストアド プロシージャを呼び出す例については、「複雑なステートメントの処理」を参照してください。

注意

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

参照

その他のリソース

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