что возвращает метод executeupdate java

Класс Statement

Statement используется для выполнения SQL-запросов. Существует три типа класса Statement, которые являются как бы контейнерами для выполнения SQL-выражений через установленное соединение:

Все классы специализируются для выполнения различных типов запросов:

Создание объектов Statement

После установления соединения Connection с базой данных, оно может использоваться для выполнения SQL-запросов. Объект Statement создается методом Connection.createStatement.

Пример :

Для отправки серверу БД SQL-выражения для выполнения необходимо вызвать метод executeQuery объекта Statement и в качестве аргумента передать скрипт запроса :

Методы Statement : executeQuery, executeUpdate, execute

Класс Statement содержит три различных метода выполнения SQL-выражений : executeQuery, executeUpdate и execute, которые вызываются в зависимости от текста SQL-запроса.

executeQuery

Метод executeQuery используется в запросах, результатом которых является один единственный набор значений, таких как запросов типа SELECT.

executeUpdate

Результатом выполнения операторов INSERT, UPDATE, или DELETE является изменения одной или более строк таблицы.

Результатом выполнения метода executeUpdate является целочисленное значение, определяющее, сколько строк было модифицировано. Для выражений DML, которые не оперируют со строками, возвращаемое методом executeUpdate значение всегда равно нулю.

execute

Метод execute используется, когда операторы SQL возвращают более одного набора данных, более одного счетчика обновлений или и то, и другое. Такая возможность редко используется программистами.

Объекты Statement сами по себе не «помнят» SQL-выражение. Оно передается в качестве аргумента методов Statement.executeXXX.

Необходимо отметить, что PreparedStatement, наследующий все методы Statement, имеет свои реализации методов executeQuery, executeUpdate и execute. Объекты PreparedStatement не принимают SQL-выражения в виде аргументов этих методов, так как они уже содержат прекомпилированные SQL-выражения.

CallableStatement наследуют методы от PreparedStatement без параметров. Использование аргументов в методах executeXXX объектов PreparedStatement и CallableStatement приведет к генерации ошибки SQLException.

Объекты Statement закрываются автоматически сборщиком мусора виртуальной машины Java. Тем не менее рекомендуется закрывать их явно после того, как работа с ними завершена. Закрытие объектов Statement после их использования освобождает ресурсы СУБД и позволяет избежать проблем с памятью.

Завершение выполнения запросов

Объект Statement считается завершенным (complete), если он выполнился и все его результаты были возвращены.

Для метода executeQuery, возвращающий набор данных, оператор считается завершенным, если считаны все строки соответствующего объекта ResultSet. В случае использования метода executeUpdate объект завершен сразу же после выполнения метода.

В случае вызова метода execute оператор остается не завершенным до тех пор, пока все наборы данных не будут считаны.

Использование PreparedStatement

PreparedStatement предварительно компилирует запросы, которые могут содержать входные параметры обозначенные символом ‘?’

Пример использования PreparedStatement

Использование CallableStatement

Синтаксис вызова хранимой процедуры в JDBC показан ниже. Квадратные скобки означают, что то, что находится между ними, необязательно, и сами по себе не являются частью синтаксиса.

Первые две формы могут иметь переменное число аргументов на входе (параметры IN), выходе (параметры OUT) или входных и выходных параметров одновременно (INOUT-параметры). Вопросительный знак означает местоположение параметра.

Метод supportsStoredProcedures() класса DatabaseMetaData позволяет узнать, поддерживает СУБД хранимые процедуры или нет.

Создание объекта CallableStatement

Объекты CallableStatement создаются методом prepareCall объекта Connection. Пример, который создает экземпляр CallableStatement, содержащий вызов хранимой процедуры setGoodsData с двумя аргументами и без возвращаемого параметра:

Входные и выходные IN- и OUT-параметры

Передача значений входных парметров объекта CallableStatement осуществляется с помощью методов setXXX, унаследованных от PreparedStatement. Типы передаваемых значений определяются тем, какой из методов setXXX используется (setString для передачи значений типа String, setInt для передачи значений типа int и т.п.).

JDBC-типы всех OUT-параметров хранимых процедур должны быть зарегистрирваны перед их вызовом. Регистрация типов данных выходного параметра производится методом registerOutParameter. Только в этом случае после вызова хранимой процедуры CallableStatement.executeQuery() можно получить результаты выполнения с помощью методов getXXX. Необходимо использовать подходящий по типу данных Java метод getXXX в соответствии с зарегистрированным JDBC-типом параметра. Другими словами, registerOutParameter использует JDBC-тип, который подходит к JDBC-типу возвращаемого из значения, а getXXX преобразует его в тип Java.

Пример регистрации выходных параметров хранимой процедуры и чтение выходных значений. В примере метод getByte извлекает байт из первого выходного параметра, а getBigDecimal возвращает объект BigDecimal (с двумя цифрами после десятичной точки) из второго выходного параметра :

Чтение выходных параметров

В связи с ограничениями некоторых СУБД для большей совместимости рекомендуется сначала считывать результаты, сгенерированные вызовом CallableStatement, а затем выходные (OUT) параметры.

Если объект CallableStatement возвращает несколько объектов ResultSet (с использованием метода execute), то ВСЕ результаты должны быть прочитаны перед первым обращением к выходным параметрам. В этом случае для того, чтобы прочитать все результаты, надо последовательно вызывать методы Statement getResultSet, getUpdateCount и getMoreResults до тех пор, пока не останется больше результатов. После этого значения выходных параметров могут быть извлечены спомощью методов CallableStatement.getXXX.

Нулевое значение в выходных параметрах, wasNull

Возращаемое значение в выходном параметре может быть NULL. При этом методы getXXX возвращают null, 0 или false, в зависимости от типа данных.

Как и в случае с ResultSet, единственным способом узнать, вернула ли процедура 0, false или NULL, является вызов метода wasNull, который возвращает true, если последнее значение, считанное одним из методов getXXX был NULL, и false иначе.

Входные/выходные параметры INOUT

Если параметр является одновременно и входным, и выходным (INOUT), то необходимо вызывать как метод setXXX, так и метод registerOutParameter. Метод setXXX устанавливает входное значение параметра, а registerOutParameter регистрирует тип выходного значения.

Типы входного и выходного значений, зарегистрированных методом registerOutParameter, должны быть одинаковыми. Для чтения выходного значения используется соответствующий метод getXXX. Например, для параметра типа byte нужно использовать метод установки значения setByte, передавать JDBC-тип данных TINYINT методу registerOutParameter и использовать getByte для чтения выходного значения.

В следующий пример демонстрирует вызов хранимой процедуры rebuildTotal с одним INOUT-параметром. Метод setByte устанавливает значение параметра в 25, которое будет передано хранимой процедуре базе данных как TINYINT. Далее метод registerOutParameter регистрирует 1-ый параметр как TINYINT. После выполнения хранимой процедуры возвращается значение типа TINYINT, которое будет считано методом getByte в виде типа byte языка Java.

Если хранимая процедура оформлена функцией, т.е возвращает значение не через параметры, а через оператор «RETURNS», то для вызова используйте «execute» вместо «executeUpdate».

В отличие от ResultSet, CallableStatement не может считывать большие значения последовательно (в потоке)..

Escape-последовательности в запросах Statement

SQL-выражения Statement‘ов могут включать escape-последовательности, которые сигнализирует о том, что код выражения должен обрабатываться особо. Escape-последовательности заменяются кодом, специфичным для данной СУБД. Escape-синтаксис независит от типа СУБД

Cинтаксис escape-последовательности

Escape-конструкция заключается в фигурные скобки, где определяется ключевое слово и параметры :

Ключевое слово индицирует вид Escape-конструкции.

1. escape-последовательность с символом

Операция SQL типа LIKE использует шаблонные символы «%» и «_», которые используются для извлечения информации с определенными символами. Чтобы эти символы интерпретировались в SQL-выражении без изменений, необходимо перед ними установить обратный символ слэша «\». Этот специальный символ и называется escape-символом.

Можно явно определить, какой именно из символов использовать в качестве escape-символа, если в конце запроса ввести следующую конструкцию:

В следующем коде осуществляется чтение строки, начинающейся со знака подчеркивания:

2. escape-последовательность с функциией fn

Практически во всех СУБД есть функции для манипуляции с числами, строками, временем, датой. Эти функции могут использоваться в escape-конструкции с ключевым словом fn, именем функции и ее аргументами. Следующий пример вызывает функцию конкатенации concat с двумя аргументами:

Имя текущего пользователя БД может быть извлечено с помощью следующего вызова:

Скалярные функции могут поддерживаться различными СУБД с немного отличающимся синтаксисом, а некоторыми СУБД могут и не поддерживаться вовсе.

Для получения списка поддерживаемых СУБД функций можно использовать класс чтения метаданных DatabaseMetaData, у которого метод getNumericFunctions возвращает список имен числовых функций, разделенных запятой, а метод getStringFunctions возвращает строковые функции, и т.д.

3. escape-последовательность для работы с датой и временам

Различные СУБД отличаются форматом записи и чтения даты, времени и временного штампа, включающего дату и время (timestamp).

Формат использование escape-последовательности даты следующий:

Аналогичным образом обрабатываются escape-конструкции для типов данных TIME и TIMESTAMP:

Милисекунда (.ms) в TIMESTAMP может быть опущена.

4. escape-последовательность с хранимыми процедурами

Для обращения к хранимой процедуры из JDBC используется либо call, либо ? = call.

Если СУБД поддерживает хранимые процедуры, то они могут вызываться из JDBC с помощью следующего синтаксиса escape-последовательности:

Источник

Руководство по JDBC. Утверждения (Statements).

В прошлом уроке мы изучили что такое соединение и способы его создания.
После того, как соединение было утсановлено, мы можем начинатть взаимодействие с базой данных (далее – БД).
Взаимодействовать с БД мы можем с помощью трёх интерфейсов, которые имплементируются каждым драйвером:

Создание экземпляра Statement

Прежде, чем мы сможем использовать экземпляр Statement для выполнения SQL – запросов, нам необходимо создать такой экземпляр. ДЛя этого используется метод Connection.createStatement(). В коде это выглядит таким образом:

После этго мы можем использовать наш экземпляр statement для выполнения SQL – запросов.

Для этой цели интерфейс Statement имеет три метода, которые реализуются каждой конкретной реализацией JDBC драйвера:

Закрытие экземпляра Statement

Когда мы закрываем наше соединение (Connection) для сохранения результатов в БД мы таким же образом закрываем и экpемпляр Statement.

Для этого мы испольузем метод close().

Рассмотрим, как это выглядит в нашем коде:

Для понимания того, как это работает на практике, рассмотрим пример простого приложения, в котором мы попытаемся получить данные из БД.

В результате работы программы мы получим следующий результат:

Создание экземпляра PreparedStatement

PreparedStatement наследует интерфейс Statement, что даёт нам опредёлнные преимущества перед обычным Statement. В частности, мы получаем большую гибкость при динамичской поддержке аргументов.

Вот как выглядит создание экземпляра PreparedStatement на практике:

Все параметры, которые отмечены символом ? называются маркерами параметра. Это означает, что они должны быть переданы через параметры метода.

Каждый параметр ссылается на свой порядковый номер в сигнатуре метода. Т.е. первый маркер находится на первом месте, второй – на втором и т.д. В отличие от массивов, здесь отсчёт идёт с 1. Это связано с особенностями реляционной модели, на которой и основана работа реляционных БД.

Для выполнения SQL – запросов используются методы с такими же названиями (execute(), executeQuery, executeUpdate), которые несколько модифицированы.

Закрытие экземпляра PreparedStatement

Когда мы закрываем наше соединение (Connection) для сохранения результатов в БД мы таким же образом закрываем и экземпляр PreparedStatement.

Для этого мы испольузем метод close().

Рассмотрим, как это выглядит в нашем коде:

Для понимания того, как это работает на практике, рассмотрим пример простого приложения с использованием PreparedStatement.
Пример:

В результате работы программы мы получим, примерно, следующий результат:

В этом приложении мы сначала получаем и выводим в консоль список всех записей из таблицы developer, после чего устанавливаем salary = 3000 для всех разработчиков, у которых specialty = “Java”.

Создание экземпляра CallableStatement

Экземпляр CallableStatement используется для выполнения процедур, непосредоственно в самой БД.

Рассмотрим пример, в котором нам необходимо выполнить такую процедуру в MySQL:

Существует три типа параметров: IN, OUT, INOUT. PreparedStatement использует только IN, а CallableStatement, в свою очередь, использует все три.

Рассмотрим, что же это за параметры:

В коде, создание экземпляра CallableStatement выглядит следующим образом:

Строка SQL представляет собой процедуру, с параметрами.

Схожим с PreparedStatement способом, мы, используя экземпляр CallableStatement, должны установить значения параметров.

Когда мы используем параметры типа OUT и INOUT, нам необходимозадействовать дополнительный метод registerOutParameter(). Этот метод устанавливает тип данных JDBC в тип данных процедуры.

После того, как мы вызвали рпоцедуру, мы получаем значение из параметра OUT с помощью соответствующего метода getXXX(). Этот метод преобразует полученное значение из типа дыннх SQL в тип данных Java.

Закрытие экземпляра CallableStatement

Когда мы закрываем наше соединение (Connection) для сохранения результатов в БД мы таким же образом закрываем и экземпляр Statement.

Для этого мы испольузем метод close().

Рассмотрим, как это выглядит в нашем коде:

Для понимания того, как это работает на практике, рассмотрим пример простого приложения
Пример:

Создаём процедуру в нашей БД:

В результате работы программы мы получим следующий результат:

В этом уроке мы изучили утверждения (statements) их виды и рассмотрели примеры приложений с их использованием.

В следующем уроке мы изучим такой элемент, как Result Set.

Источник

Что возвращает метод executeupdate java

В предыдущей статье мы только познакомились с JDBC и написали простое приложение, которое позволило нам соединиться с СУБД и получить данные с помощью SQL-запроса. Хоть программа и не очень сложная, но на мой взгляд, мы сделали весьма важный шаг — мы смогли соединиться с базой данных и сделать пусть и простой, но запрос. Все, что мы рассмотрим дальше — это уже более удобные и более профессиональные способы использования JDBC.

Запросы на получение данных и запросы на обновление

SQL-запросы можно условно разделить на две группы:

Для первой группы используется уже знакомый нам метод интерфейса StatementexecuteQuery(). В принципе для начала этого метода вполне достаточно. Он покрывает очень большой процент запросов, которые разрабатываются для реальных систем. Позже мы познакомимся с дополнительными возможностями, но на данных момент советую запомнить — если надо получить данные из таблицы, то executeQuery в подавляющем большинстве случаев будет самым правильным выбором.
Для второй группа запросов (опять же в большинстве случаев) может использоваться другой метод интерфейса StatementexecuteUpdate(). Есл посмотреть документацию, то в отличии от executeQuery() (который возвращает ResultSet) этот метод возвращает целое число, которое говорит сколько строк в таблице было изменено при исполнении вашего запроса.
Например, вы можете оператором DELETE FROM JC_CONTACT удалить ВСЕ строки (посему будьте очень аккуратны). В этом случае метод executeUpdate() вернет количество удаленных строк. В некоторых ситуациях знание о количестве измененных строк бывает удобным для построения алгоритмов работы с данными.
В принципе с этим вопросов можно закончить — главное мы уже увидели. Для выборки данных — executeQuery(). Для изменения данных — executeUpdate().

Разновидности Statement

Самый простой интерфейс Statement мы уже видели. И хотя он вполне пригоден для работы, для сложных запросов он подходит не так хорошо. В некоторых источниках высказывается мнение, что использовать Statement вообще не надо — вместо него подходят более сложные и более функционально насыщенные интерфейсы.

PreparedStatement

Источник

Руководство JDBC TM

4.1 Обзор

Интерфейс Statement предоставляет базовые методы для выполнения запросов и извлечения результатов. Интерфейс PreparedStatement добавляет методы управления входными (IN) параметрами; CallableStatement добавляет методы для манипуляции выходними (OUT) параметрами.

4.1.1 Создание объектов Statement

4.1.2 Выполнение запроса через объект Statement

Метод execute используется, когда операторы SQL возвращают более одного набора данных, более одного счетчика обновлений или и то, и другое. Поскольку такая возможность редко используется программистами, она описана чуть позже.

4.1.3 Выполнение запросов

4.1.4 Закрытие объектов Statement

4.1.5 Подстановочный (ecape) синтаксис SQL в объектах Statement

Escape-конструкция заключается в фигурные скобки и ключевое слово:

Ключевое слово индицирует вид Escape-конструкции, как показано ниже:

Например, в следующем примере осуществляется поиск строки, начинающейся со знака подчеркивания:

Имя текущего пользователя БД может быть извлечено с помощью следующего вызова:

Скалярные функции могут поддерживаться различными СУБД с немного отличающимся синтаксисом, а некоторыми СУБД могут и не поддерживаться вовсе. Различные методы класса DatabaseMetaData возвращают список поддерживаемых функций. Например, метод getNumericFunctions возвращает список имен числовых функций, разделенных запятой, а метод getStringFunctions возвращает строковые функции, и т.д.

Драйвер может либо отображать escape-функции в родной для данной СУБД SQL-код, либо вычислять функцию сам.

Разные СУБД отличаются способом записи даты, времени и временного штампа (timestamp, включает и дату, и время). JDBC поддерживает стандартный формат ISO для таких литералов посредством использования escape-конструкций в SQL-выражениях, которые каждым конкретным драйвером в SQL-код, специфичный для каждой конкретной СУБД.

Например, даты в JDBC записываются так:

Аналогичным образом обрабатываются escape-конструкции для типов данных TIME и TIMESTAMP :

Если СУБД поддерживает хранимые процедуры, то они могут вызываться из JDBC с помощью следующего синтаксиса:

или, в случае, когда процедура возвращает значение:

Квадратные скобки означают, что все, что в них заключено, можно пропустить. Они не входят в саму синтаксическую конструкцию.

Входные аргументы могут быть либо литералами, либо параметрами. См. раздел 7 «CallableStatement» этого руководства.

Синтаксис внешних соединений следующий:

где внеш-соединение задается в виде

4.1.6 Использование метода execute

Пример, приведенный ниже, демонстрирует один из способов получения всех наборов данных и счетчиков обновлений, сгенерированных вызовом execute :

Источник

Что возвращает метод executeupdate java

The object used for executing a static SQL statement and returning the results it produces.

By default, only one ResultSet object per Statement object can be open at the same time. Therefore, if the reading of one ResultSet object is interleaved with the reading of another, each must have been generated by different Statement objects. All execution methods in the Statement interface implicitly close a current ResultSet object of the statement if an open one exists.

Field Summary

Method Summary

Methods inherited from interface java.sql.Wrapper

Field Detail

CLOSE_CURRENT_RESULT

KEEP_CURRENT_RESULT

CLOSE_ALL_RESULTS

SUCCESS_NO_INFO

EXECUTE_FAILED

RETURN_GENERATED_KEYS

NO_GENERATED_KEYS

Method Detail

executeQuery

executeUpdate

close

Calling the method close on a Statement object that is already closed has no effect.

Note: When a Statement object is closed, its current ResultSet object, if one exists, is also closed.

getMaxFieldSize

setMaxFieldSize

getMaxRows

setMaxRows

setEscapeProcessing

The Connection and DataSource property escapeProcessing may be used to change the default escape processing behavior. A value of true (the default) enables escape Processing for all Statement objects. A value of false disables escape processing for all Statement objects. The setEscapeProcessing method may be used to specify the escape processing behavior for an individual Statement object.

Note: Since prepared statements have usually been parsed prior to making this call, disabling escape processing for PreparedStatements objects will have no effect.

getQueryTimeout

setQueryTimeout

Note: JDBC driver implementations may also apply this limit to ResultSet methods (consult your driver vendor documentation for details).

Note: In the case of Statement batching, it is implementation defined as to whether the time-out is applied to individual SQL commands added via the addBatch method or to the entire batch of SQL commands invoked by the executeBatch method (consult your driver vendor documentation for details).

cancel

getWarnings

The warning chain is automatically cleared each time a statement is (re)executed. This method may not be called on a closed Statement object; doing so will cause an SQLException to be thrown.

Note: If you are processing a ResultSet object, any warnings associated with reads on that ResultSet object will be chained on it rather than on the Statement object that produced it.

clearWarnings

setCursorName

Note: By definition, the execution of positioned updates and deletes must be done by a different Statement object than the one that generated the ResultSet object being used for positioning. Also, cursor names must be unique within a connection.

execute

The execute method executes an SQL statement and indicates the form of the first result. You must then use the methods getResultSet or getUpdateCount to retrieve the result, and getMoreResults to move to any subsequent result(s).

getResultSet

getUpdateCount

getMoreResults

There are no more results when the following is true:

setFetchDirection

Note that this method sets the default fetch direction for result sets generated by this Statement object. Each result set has its own methods for getting and setting its own fetch direction.

getFetchDirection

setFetchSize

getFetchSize

getResultSetConcurrency

getResultSetType

addBatch

clearBatch

executeBatch

The possible implementations and return values have been modified in the Java 2 SDK, Standard Edition, version 1.3 to accommodate the option of continuing to process commands in a batch update after a BatchUpdateException object has been thrown.

getConnection

getMoreResults

There are no more results when the following is true:

getGeneratedKeys

Note: If the columns which represent the auto-generated keys were not specified, the JDBC driver implementation will determine the columns which best represent the auto-generated keys.

executeUpdate

executeUpdate

executeUpdate

execute

In some (uncommon) situations, a single SQL statement may return multiple result sets and/or update counts. Normally you can ignore this unless you are (1) executing a stored procedure that you know may return multiple results or (2) you are dynamically executing an unknown SQL string.

The execute method executes an SQL statement and indicates the form of the first result. You must then use the methods getResultSet or getUpdateCount to retrieve the result, and getMoreResults to move to any subsequent result(s).

execute

Under some (uncommon) situations, a single SQL statement may return multiple result sets and/or update counts. Normally you can ignore this unless you are (1) executing a stored procedure that you know may return multiple results or (2) you are dynamically executing an unknown SQL string.

The execute method executes an SQL statement and indicates the form of the first result. You must then use the methods getResultSet or getUpdateCount to retrieve the result, and getMoreResults to move to any subsequent result(s).

execute

In some (uncommon) situations, a single SQL statement may return multiple result sets and/or update counts. Normally you can ignore this unless you are (1) executing a stored procedure that you know may return multiple results or (2) you are dynamically executing an unknown SQL string.

The execute method executes an SQL statement and indicates the form of the first result. You must then use the methods getResultSet or getUpdateCount to retrieve the result, and getMoreResults to move to any subsequent result(s).

getResultSetHoldability

isClosed

setPoolable

The poolable value of a statement is applicable to both internal statement caches implemented by the driver and external statement caches implemented by application servers and other applications.

By default, a Statement is not poolable when created, and a PreparedStatement and CallableStatement are poolable when created.

isPoolable

closeOnCompletion

isCloseOnCompletion

getLargeUpdateCount

The default implementation will throw UnsupportedOperationException

setLargeMaxRows

The default implementation will throw UnsupportedOperationException

getLargeMaxRows

The default implementation will return 0

executeLargeBatch

The default implementation will throw UnsupportedOperationException

executeLargeUpdate

The default implementation will throw UnsupportedOperationException

executeLargeUpdate

The default implementation will throw SQLFeatureNotSupportedException

executeLargeUpdate

The default implementation will throw SQLFeatureNotSupportedException

executeLargeUpdate

The default implementation will throw SQLFeatureNotSupportedException

Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2021, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *