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 einResultSetfalse: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()?