Verwenden von mehreren Resultsets

Bei der Arbeit mit Inline-SQL-Prozeduren oder gespeicherten SQL Server-Prozeduren, die mehr als ein Resultset zurückgeben, bietet der Microsoft SQL Server JDBC Driver die getResultSet-Methode der SQLServerStatement-Klasse, um die einzelnen zurückgegebenen Datensätze abzurufen. Beim Ausführen einer Anweisung, die mehr als ein Resultset zurückgibt, können Sie darüber hinaus die execute-Methode der SQLServerStatement-Klasse verwenden, weil ein boolean-Wert zurückgegeben wird, der angibt, ob es sich bei dem zurückgegebenen Wert um ein Resultset oder eine Updatezählung handelt.

Wenn die execute-Methode true zurückgibt, wurde von der ausgeführten Anweisung mindestens ein Resultset zurückgegeben. Sie können die getResultSet-Methode aufrufen, um auf das erste Resultset zuzugreifen. Um zu ermitteln, ob weitere Resultsets verfügbar sind, können Sie die getMoreResults-Methode aufrufen, die den boolean-Wert true zurückgibt, falls weitere Resultsets verfügbar sind. Wenn mehr Resultsets verfügbar sind, können Sie erneut die getResultSet-Methode aufrufen, um darauf zuzugreifen, und den Prozess fortsetzen, bis alle Resultsets verarbeitet wurden. Wenn die getMoreResults-Methode false zurückgibt, sind keine weiteren Resultsets mehr vorhanden.

Wenn die execute-Methode false zurückgibt, wurde von der ausgeführten Anweisung ein Updatezählwert zurückgegeben, der durch Aufruf der getUpdateCount-Methode abgerufen werden kann.

Hinweis

Weitere Informationen zu Updatezählungen finden Sie unter Verwenden von gespeicherten Prozeduren mit einer Updatezählung.

Im folgenden Beispiel werden eine offene Verbindung zur SQL Server 2005 AdventureWorks-Beispieldatenbank an die Funktion übergeben und eine SQL-Anweisung erstellt, die bei ihrer Ausführung zwei Resultsets zurückgibt.

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();
   }
}

In diesem Fall ist bekannt, dass zwei Resultsets zurückgegeben werden. Der Code ist jedoch so geschrieben, dass alle Resultsets verarbeitet werden, wenn die Anzahl der zurückgegebenen Resultsets unbekannt ist, wie z. B. beim Aufrufen einer gespeicherten Prozedur. Ein Beispiel für den Aufruf einer gespeicherten Prozedur, die mehrere Resultsets sowie Updatewerte zurückgibt, finden Sie unter Verarbeiten komplexer Anweisungen.

Hinweis

Wenn Sie die getMoreResults-Methode der SQLServerStatement-Klasse aufrufen, wird das zuvor zurückgegebene Resultset implizit geschlossen.

Siehe auch

Andere Ressourcen

Verwenden von Anweisungen mit dem JDBC-Treiber