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