Выполнение запросов
Все SQL-запросы можно условно разделить на две группы:
- Получение данных — к ним относится оператор SELECT .
- Изменение данных — к ним относятся операторы INSERT , UPDATE и DELETE .
Для первой группы используется уже знакомый нам метод интерфейса Statement — executeQuery() . В принципе для начала этого метода вполне достаточно. Он покрывает очень большой процент запросов, которые вам придется использовать на реальной работе.
Позже мы познакомимся с дополнительными возможностями, но на данный момент советую запомнить — если ты хочешь просто получить данные из таблицы, то метод executeQuery() в подавляющем большинстве случаев будет самым правильным выбором.
Для второй группы запросов нужно использовать другой метод интерфейса Statement — executeUpdate() . В отличии от метода executeQuery() , который возвращает ResultSet, этот метод возвращает целое число, которое говорит сколько строк в таблице было изменено при исполнении вашего запроса .
Например, ты можешь оператором DELETE FROM employee удалить все строки (посему будьте очень аккуратны). В этом случае метод executeUpdate() вернет количество удаленных строк. В некоторых ситуациях знание о количестве измененных строк бывает удобным для построения алгоритмов работы с данными.
В принципе с этим вопросов можно закончить — главное мы уже увидели. Для выборки данных — executeQuery() . Для изменения данных — executeUpdate() .
Получим количество пользователей в таблице user с помощью методa executeQuery() :
ResultSet results = statement.executeQuery("SELECT Count(*) FROM user"); results.next(); int count = results.getInt(1);
executeUpdate()
Метод executeUpdate() используется тогда, когда твой запрос что-то меняет в таблице. Это может быть что угодно:
- оператор UPDATE
- оператор INSERT
- оператор DELETE
- оператор CALL PROCEDURE
Этот метод возвращает количество измененный (или удаленных) строк.
Давай напишем запрос, который увеличит зарплату всех наших сотрудников на 1000 рублей.
int rowsCount = statement.executeUpdate("UPDATE employee SET salary = salary+1000");
После того как я выполнил этот код, на своей таблице он вернул число 6. В моей таблице было 6 строк. Значит все строки были изменены.
execute ()
Иногда в твоей жизни могут возникнуть ситуации, когда ты точно не знаешь, какой запрос тебе приходится исполнять — выборка или изменение данных. На этот случай создатели JDBC добавили в него еще один универсальный метод — execute() .
Этот метод можно использовать вместо executeQuery() и executeUpdate() методов. А помнишь, чем эти методы отличались? Правильно. Типом результата. Поэтому создатели JDBC придумали такое решение.
Метод execute() возвращает boolean. Если это значение равно true , то значит выполнялся запрос на получение данных, и тебе нужно вызвать метод getResultSet() , чтобы получить данные. Пример:
boolean hasResults = statement.execute("SELECT Count(*) FROM user"); if ( hasResults )
Если это значение равно false , то значит выполнялся запрос на изменение данных, и тебе нужно вызвать метод getUpdateCount() , чтобы получить количество измененных строк. Пример:
boolean hasResults = statement.execute("UPDATE employee SET salary = salary+1000"); if ( !hasResults )
Давай напишем метод, который выводит на экран результат запроса:
public void executeAndPrintSQLQuery(String sqlQuery) < boolean hasResults = statement.execute(sqlQuery); if ( hasResults ) < ResultSet results = statement.getResultSet(); System.out.println(“Строки вашего запроса ниже: ”); while (results.next()) < Integer String name = results.getString(2); System.out.println(results.getRow() + ". " + id + "\t"+ name); >> else < int count = statement.getUpdateCount(); System.out.println(“Количество именных строк: ” + count); >>
Вот так метод execute() обычно применяется на практике.