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 JDBC-Treiber für SQL Server die getResultSet-Methode in der SQLServerStatement-Klasse, um die einzelnen zurückgegebenen Datensätze abzurufen. Beim Ausführen einer Anweisung, die mehrere Resultsets zurückgibt, können Sie darüber hinaus die Methode execute der SQLServerStatement-Klasse verwenden, da ein boolescher Wert zurückgegeben wird, der angibt, ob es sich bei dem zurückgegebenen Wert um ein Resultset oder eine Updatezählung handelt.
Wenn die Methode „execute“ TRUE zurückgibt, wurde von der ausgeführten Anweisung mindestens ein Resultset zurückgegeben. Sie können die Methode „getResultSet“ aufrufen, um auf das erste Resultset zuzugreifen. Um zu ermitteln, ob weitere Resultsets verfügbar sind, können Sie die Methode getMoreResults aufrufen, die den booleschen Wert TRUE zurückgibt, falls weitere Resultsets verfügbar sind. Wenn mehr Resultsets verfügbar sind, können Sie erneut die Methode „getResultSet“ 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 für die Verarbeitung vorhanden.
Wenn die Methode „execute“ FALSE zurückgibt, wurde von der ausgeführten Anweisung ein Updatezählwert zurückgegeben, der durch Aufruf der Methode getUpdateCount abgerufen werden kann.
Hinweis
Weitere Informationen zu aktualisierten Zählerwerten finden Sie unter Verwenden von gespeicherten Prozedur mit aktualisierten Zählerwerten.
Im folgenden Beispiel wird eine offene Verbindung zur AdventureWorks2022-Beispieldatenbank an die Funktion übergeben und eine SQL-Anweisung erstellt, die bei der Ausführung zwei Ergebnismengen liefert:
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();
}
}
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.