Verarbeiten komplexer Anweisungen

Bei Verwendung von Microsoft SQL Server JDBC Driver müssen Sie u. U. komplexe Anweisungen verarbeiten, z. B. Anweisungen, die zur Laufzeit dynamisch generiert werden. Komplexe Anweisungen führen oftmals eine Vielzahl von Tasks aus, wie z. B. Update-, Insert- und Delete-Operationen. Diese Anweisungstypen können 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 effizient auszuführen, umfasst der JDBC-Treiber eine Reihe von 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. Diese Methode gibt einen boolean-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 SQL Server 2005 AdventureWorks-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 {
      String sqlStringWithUnknownResults = "{call dbo.uspGetEmployeeManagers(50)};SELECT TOP 10 * FROM Person.Contact";
      Statement stmt = con.createStatement();
      boolean results = stmt.execute(sqlStringWithUnknownResults);
      int count = 0;
      do {
         if (results) {
            ResultSet rs = stmt.getResultSet();
            System.out.println("Result set data displayed here.");
            rs.close();
         } 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);
      stmt.close();
   }
   catch (Exception e) {
      e.printStackTrace();
   }
}

Siehe auch

Andere Ressourcen

Verwenden von Anweisungen mit dem JDBC-Treiber