Ако изявление може да върне no или multiple резултати, не трябва да използвате executeQuery , но execute() вместо това този метод връща boolean показващ типа на първия резултат:
true:резултатът еResultSetfalse:резултатът е брой актуализации
Ако резултатът е 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()?