Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Führen Sie sp_msforeachdb in einer Java-Anwendung aus

Wenn eine Anweisung kein oder mehrere zurückgeben kann Ergebnisse, sollten Sie executeQuery nicht verwenden , aber execute() stattdessen gibt diese Methode einen boolean zurück Angabe des Typs des ersten Ergebnisses:

  • true :Ergebnis ist ein ResultSet
  • false :Ergebnis ist ein Aktualisierungszähler

Wenn das Ergebnis true ist , dann verwenden Sie getResultSet() um das ResultSet abzurufen , andernfalls getUpdateCount() um die Aktualisierungsanzahl abzurufen. Wenn der Aktualisierungszähler -1 ist es bedeutet, dass es keine weiteren Ergebnisse gibt. Beachten Sie, dass die Anzahl der Aktualisierungen ebenfalls -1 ist wenn das aktuelle Ergebnis ein ResultSet ist . Es ist auch gut zu wissen, dass getResultSet() sollte null zurückgeben, wenn es keine weiteren Ergebnisse gibt oder wenn das Ergebnis eine Aktualisierungszählung ist.

Wenn Sie nun weitere Ergebnisse abrufen möchten, rufen Sie getMoreResults() auf (oder sein Bruder, der einen int akzeptiert Parameter). Der Rückgabewert von boolean hat dieselbe Bedeutung wie execute() , also false bedeutet nicht, dass es keine weiteren Ergebnisse gibt!

Es gibt nur dann keine Ergebnisse mehr, wenn getMoreResults() gibt false und getUpdateCount() zurück gibt -1 zurück (wie auch im Javadoc dokumentiert)

Im Wesentlichen bedeutet dies, dass Sie Folgendes tun müssen, wenn Sie alle Ergebnisse korrekt verarbeiten möchten:

boolean result = stmt.execute(...);
while(true)
    if (result) {
        ResultSet rs = stmt.getResultSet();
        // Do something with resultset ...
    } else {
        int updateCount = stmt.getUpdateCount();
        if (updateCount == -1) {
            // no more results
            break;
        }
        // Do something with update count ...
    }
    result = stmt.getMoreResults();
}

HINWEIS:Ein Teil dieser Antwort basiert auf meiner Antwort auf Java SQL:Statement.hasResultSet()?