ExecuteQuery () против getResultSet () в Java - PullRequest
0 голосов
/ 08 октября 2018

В чем разница между statement.executeQuery и statement.getResultSet().Я полагаю, что оба вернутся ResultSet для выбора оператора, но есть ли какие-то конкретные критерии, когда мы должны использовать какой из них.

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Как правило, вы должны использовать 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 , для более подробного примера

0 голосов
/ 08 октября 2018

Проверьте JavaDoc для этих методов.getResultSet может вернуть ноль, но executeQuery никогда не вернет ноль.

Есть и другие ограничения.Например, executeQuery нельзя вызвать на PreparedStatement или CallableStatement.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...