1. Знайомство з Statement

Усі SQL-запити можна умовно розділити на дві групи:

  • Отримання даних — до них належить оператор SELECT.
  • Зміна даних — до них належать оператори INSERT, UPDATE та DELETE.

Для першої групи використовується вже знайомий нам метод інтерфейсу StatementexecuteQuery(). У принципі для початку цього цілком достатньо. Він покриває дуже великий відсоток запитів, які доведеться використовувати в реальній роботі.

Пізніше ми познайомимося з додатковими можливостями, але зараз раджу запам'ятати ось таке: якщо ти хочеш просто отримати дані з таблиці, то метод 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() зазвичай застосовується на практиці.