Als een instructie nee of veelvoud kan opleveren resultaten, moet u executeQuery niet gebruiken , maar execute() in plaats daarvan retourneert deze methode een boolean geeft het type van het eerste resultaat aan:
true:resultaat is eenResultSetfalse:resultaat is een updatetelling
Als het resultaat true is , dan gebruik je getResultSet() om de ResultSet . op te halen , anders getUpdateCount() om de updatetelling op te halen. Als het aantal updates -1 is het betekent dat er geen resultaten meer zijn. Merk op dat het aantal updates ook -1 . zal zijn wanneer het huidige resultaat een ResultSet . is . Het is ook goed om te weten dat getResultSet() zou null moeten retourneren als er geen resultaten meer zijn of als het resultaat een updatetelling is.
Als u nu meer resultaten wilt ophalen, roept u getMoreResults() . aan (of zijn broer accepteert een int parameter). De retourwaarde van boolean heeft dezelfde betekenis als die van execute() , dus false betekent niet dat er geen resultaten meer zijn!
Er zijn alleen geen resultaten meer als de getMoreResults() retourneert false en getUpdateCount() retourneert -1 (zoals ook gedocumenteerd in de Javadoc)
Dit betekent in wezen dat als u alle resultaten correct wilt verwerken, u iets als hieronder moet doen:
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();
}
OPMERKING:een deel van dit antwoord is gebaseerd op mijn antwoord op Java SQL:Statement.hasResultSet()?