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