Pokud příkaz může vrátit ne nebo násobek výsledky, neměli byste používat executeQuery
, ale execute()
místo toho tato metoda vrací boolean
označující typ prvního výsledku:
true
:výsledkem jeResultSet
false
:výsledkem je počet aktualizací
Pokud je výsledek true
, pak použijete getResultSet()
k načtení ResultSet
, jinak getUpdateCount()
pro načtení počtu aktualizací. Pokud je počet aktualizací -1
znamená to, že již nejsou žádné výsledky. Všimněte si, že počet aktualizací bude také -1
když je aktuální výsledek ResultSet
. Je také dobré vědět, že getResultSet()
by měl vrátit hodnotu null, pokud nejsou k dispozici žádné další výsledky nebo pokud je výsledkem počet aktualizací.
Nyní, pokud chcete získat další výsledky, zavoláte getMoreResults()
(nebo jeho bratr přijímající int
parametr). Návratová hodnota boolean
má stejný význam jako execute()
, takže false
neznamená, že již nejsou žádné další výsledky!
Pokud getMoreResults()
, nejsou k dispozici žádné další výsledky vrátí hodnotu false a getUpdateCount()
vrátí -1
(jak je také zdokumentováno v Javadoc)
V podstatě to znamená, že pokud chcete správně zpracovat všechny výsledky, musíte udělat něco jako níže:
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();
}
POZNÁMKA:Část této odpovědi je založena na mé odpovědi na Java SQL:Statement.hasResultSet()?