Подтвердить что ты не робот

Statement.execute(sql) vs executeUpdate (sql) и executeQuery (sql)

У меня есть вопрос, связанный с этим методом: st.execute(sql); где st, очевидно, является объектом Statement. Непосредственно из этого руководства по Java-оракулу:

execute: возвращает true, если первый объект, который возвращает запрос, является объектом ResultSet. Используйте этот метод, если запрос может вернуть один или несколько объектов ResultSet. Получите объекты ResultSet, возвращенные из запроса, несколько раз вызвав Statement.getResutSet.

Что подразумевается под " одним или несколькими объектами ResultSet "? Как можно управлять ими, получив массив ResultSet? Тогда как st.executeQuery(sql) и st.executeUpdate(sql) очень понятны. Это не (по крайней мере для меня) цель st.execute(sql) которая также может возвращать int, как если бы она была обновлена в таблице.

заранее спасибо

4b9b3361

Ответ 1

Что они означают под "одним или несколькими объектами ResultSet"?

В javadoc для метода execute сказано следующее:

"Выполняет данный оператор SQL, который может возвращать несколько результатов. В некоторых (необычных) ситуациях один оператор SQL может возвращать несколько наборов результатов и/или количество обновлений. Обычно вы можете игнорировать это, если вы не выполняете (1) хранимая процедура, которую вы знаете, может возвращать несколько результатов или (2) вы динамически выполняете неизвестную строку SQL."

Это в значительной степени объясняет это. Иногда запрос может передавать более одного ResultSet.

если да, то как можно управлять ими после получения массива ResultSet?

Я не уверен, что вы имеете в виду, но:

  • вы не можете получить их как массив: вы должны получить их по одному, а
  • вы можете поместить ResultSets в массив...

Это не (по крайней мере для меня) цель st.execute(sql), которая также может возвращать int, как если бы она была обновлена ​​таблицей.

Одно использование execute заключается в выполнении оператора SQL, если вы не знаете, является ли это запросом, каким-либо обновлением (...) или чем-то другим, потенциально поставляющим несколько наборов результатов. Это обобщение executeQuery() и executeUpdate()...

Ответ 2

boolean execute(): выполняет оператор SQL в этом объекте подготовленного оператора, который может быть любым видом оператора SQL.

ResultSet executeQuery(): выполняет запрос SQL в этом объекте Prepared Statement и возвращает объект ResultSet, сгенерированный запросом.

int executeUpdate(): выполняет оператор SQL в этом объекте подготовленного оператора, который должен быть оператором SQL INSERT, UPDATE или DELETE; или оператор SQL, который ничего не возвращает, такой как оператор DDL.

Лучшее место, чтобы найти ответы на такие вопросы, как это Javadocs: здесь

Ответ 3

Вам может понадобиться количество обновленных строк или идентификатор последней вставленной строки в таблице, поэтому вам следует использовать executeUpdate() которая возвращает int. А также вам нужны данные, когда вы выбираете что-то, что вы должны использовать executeQuery() который возвращает ResultSet. И сама execute() возвращает boolean иногда может помочь.