Как правило, вы должны использовать executeQuery
, если знаете, что выполняете оператор выбора.Сам метод getResultSet()
не выполняет оператор .
getResultSet
предназначен для использования в сочетании с execute
.Методы execute
предназначены для использования с неизвестными типами операторов или операторами, которые могут давать несколько результатов (т. Е. 0 или более обновлений или наборов результатов).
Короче говоря: обычно вы должны использовать executeQuery
.
Простой пример, когда вы должны использовать execute
, если код не знает, какой запрос он собирается выполнить (обновление, запрос или что-то более сложное), например, при выполнении пользователяпредоставленные запросы.
Другим примером являются хранимые процедуры SQL Server, которые могут возвращать несколько счетчиков обновлений и наборов результатов.
Общий способ обработки результата execute
:
boolean isResultSet = statement.execute(sql);
while (true) {
if (isResultSet) {
try (ResultSet rs = statement.getResultSet()) {
// do something with result set
}
} else {
int updateCount = statement.getUpdateCount();
if (updateCount == -1) {
// -1 signals no more results
break;
}
// do something with update count
}
// move to next result
isResultSet = statement.getMoreResults();
}
Это обеспечивает обработку всех результатов *.
*: в этом примере игнорируются результаты исключений для систем (например, SQL Server), которые допускают чередование нескольких исключений.с наборами результатов и количеством обновлений см. Как получить * все * обратно из хранимой процедуры, используя JDBC , для более подробного примера