Ако изявление може да върне no или multiple резултати, не трябва да използвате executeQuery
, но execute()
вместо това този метод връща boolean
показващ типа на първия резултат:
true
:резултатът еResultSet
false
:резултатът е брой актуализации
Ако резултатът е true
, след това използвате getResultSet()
за да извлечете ResultSet
, в противен случай getUpdateCount()
за да извлечете броя на актуализациите. Ако броят на актуализациите е -1
това означава, че няма повече резултати. Имайте предвид, че броят на актуализациите също ще бъде -1
когато текущият резултат е ResultSet
. Също така е добре да знаете, че getResultSet()
трябва да върне null, ако няма повече резултати или ако резултатът е преброяване на актуализациите.
Сега, ако искате да извлечете повече резултати, извиквате getMoreResults()
(или неговият брат, приемащ int
параметър). Връщаната стойност на boolean
има същото значение като това на execute()
, така че false
не означава, че няма повече резултати!
Няма повече резултати само ако getMoreResults()
връща false и getUpdateCount()
връща -1
(както също е документирано в Javadoc)
По същество това означава, че ако искате да обработите правилно всички резултати, трябва да направите нещо като по-долу:
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();
}
ЗАБЕЛЕЖКА:Част от този отговор се основава на моя отговор на Java SQL:Statement.hasResultSet()?