Verarbeiten komplexer Anweisungen

JDBC-Treiber herunterladen

Bei Verwendung des Microsoft JDBC-Treibers für SQL Server müssen Sie u. U. komplexe Anweisungen verarbeiten, z. B. Anweisungen, die zur Laufzeit dynamisch generiert werden. Komplexe Anweisungen führen oftmals verschiedene Arten von Tasks aus, wie z. B. Update-, Insert- und Delete-Operationen. Diese Anweisungstypen könnten auch mehrere Resultsets und Ausgabeparameter zurückgeben. In diesen Situationen kann es vorkommen, dass der Java-Code, der die Anweisungen ausführt, die Typen und die Anzahl der zurückgegebenen Objekte und Daten zunächst nicht kennt.

Um komplexe Anweisungen auszuführen, umfasst der JDBC-Treiber viele Methoden, um die zurückgegebenen Objekte und Daten abzufragen, damit sie in der Anwendung ordnungsgemäß verarbeitet werden können. Der Schlüssel für die Verarbeitung komplexer Anweisungen ist die execute-Methode der SQLServerStatement-Klasse. Dies gibt einen booleschen Wert zurück. Ist der Wert "true", handelt es sich bei dem ersten zurückgegebenen Ergebnis der Anweisungen um ein Resultset. Ist der Wert „false“, handelt es sich bei dem ersten zurückgegebenen Ergebnis um eine Updatezählung.

Wenn Sie den Typ der zurückgegebenen Objekte oder Daten kennen, können Sie diese Daten mit der getResultSet-Methode bzw. der getUpdateCount-Methode verarbeiten. Um die nächsten Objekte oder Daten zu verarbeiten, die von der komplexen Anweisung zurückgegeben werden, können Sie die getMoreResults-Methode aufrufen.

Im folgenden Beispiel werden eine offene Verbindung zur AdventureWorks2022-Beispieldatenbank an die Funktion übergeben, eine komplexe Anweisung erstellt, die den Aufruf einer gespeicherten Prozedur mit einer SQL-Anweisung kombiniert, die Anweisungen ausgeführt und dann alle zurückgegebenen Resultsets und Updatezählungen in einer do-Schleife verarbeitet.

public static void executeComplexStatement(Connection con) {
    try (Statement stmt = con.createStatement();) {
        String sqlStringWithUnknownResults = "{call dbo.uspGetEmployeeManagers(50)}; SELECT TOP 10 * FROM Person.Contact";
        boolean results = stmt.execute(sqlStringWithUnknownResults);
        int count = 0;
        do {
            if (results) {
                ResultSet rs = stmt.getResultSet();
                System.out.println("Result set data displayed here.");
            }
            else {
                count = stmt.getUpdateCount();
                if (count >= 0) {
                    System.out.println("DDL or update data displayed here.");
                }
                else {
                    System.out.println("No more results to process.");
                }
            }
            results = stmt.getMoreResults();
        }
        while (results || count != -1);
    }
    // Handle any errors that may have occurred.
    catch (SQLException e) {
        e.printStackTrace();
    }
}

Weitere Informationen

Verwenden von Anweisungen mit dem JDBC-Treiber