Sobes.tech
Junior

Koja je razlika između metoda execute, executeQuery i executeUpdate?

sobes.tech АИ

Одговор од АИ

Metode execute, executeQuery i executeUpdate koriste se za izvršavanje SQL upita putem JDBC-a, ali su namenjene za različite tipove upita i vraćaju različite rezultate.

  1. executeQuery(String sql):

    • Namenjena je za izvršavanje SQL upita tipa SELECT.
    • Vraća objekat ResultSet, koji sadrži rezultate upita.
    • Baca izuzetak SQLException ako upit nije SELECT.
    // Primer korišćenja executeQuery
    String sql = "SELECT COUNT(*) FROM users";
    try (ResultSet rs = statement.executeQuery(sql)) {
        if (rs.next()) {
            int userCount = rs.getInt(1);
            System.out.println("Broj korisnika: " + userCount);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    
  2. executeUpdate(String sql):

    • Namenjena je za izvršavanje SQL upita tipa INSERT, UPDATE ili DELETE.
    • Такође може да се користи за извршавање DDL команда (нпр. CREATE TABLE, ALTER TABLE).
    • Враћа цео број (int) који представља број утицаних редова или 0.
    • Бачи изузетак SQLException ако упит враћа ResultSet.
    // Primer korišćenja executeUpdate
    String sql = "UPDATE products SET price = price * 1.1 WHERE category = 'electronics'";
    try {
        int updatedRows = statement.executeUpdate(sql);
        System.out.println("Ажурираних редова: " + updatedRows);
    } catch (SQLException e) {
        e.printStackTrace();
    }
    
  3. execute(String sql):

    • Универзална метода за извршавање било којег типа SQL упита.
    • Враћа boolean: true ако је резултат ResultSet (за SELECT), и false ако је резултат број утицаних редова или ништа (за INSERT, UPDATE, DELETE, DDL).
    • За добијање стварног резултата након execute:
      • Ако execute врати true, користите getResultSet() за добијање ResultSet.
      • Ако execute врати false, користите getUpdateCount() за добијање броја утицаних редова.
    // Primer korišćenja execute
    String sql = "CREATE TABLE IF NOT EXISTS logs (id INT PRIMARY KEY, message VARCHAR(255))";
    try {
        boolean isResultSet = statement.execute(sql);
        if (isResultSet) {
            // Ово је `SELECT` упит
            try (ResultSet rs = statement.getResultSet()) {
                // Обрада резултата
            }
        } else {
            // Ово је `INSERT`, `UPDATE`, `DELETE` или DDL упит
            int updateCount = statement.getUpdateCount();
            System.out.println("Број утицаних редова или DDL резултат: " + updateCount);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    

У табели испод су приказане главне разлике:

Метод Тип SQL упита Враћена вредност Примери упита
executeQuery SELECT ResultSet SELECT * FROM users
executeUpdate INSERT, UPDATE, DELETE, DDL int (број утицаних редова или 0) INSERT INTO, UPDATE users, DROP TABLE
execute Свако boolean (true, ако ResultSet; false, ако не) Свако

Обично се препоручује коришћење специфичнијих метода (executeQuery, executeUpdate), када је тип упита унапред познат, јер то повећава јасност кода и омогућава компајлеру или IDE-у да врши прецизније провере. Метод execute се користи у случајевима када је тип упита динамичан или непознат унапред.