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 einResultSet
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()?