Sobes.tech
Junior

Aký je rozdiel medzi metódami execute, executeQuery a executeUpdate?

sobes.tech AI

Odpoveď od AI

Metódy execute, executeQuery a executeUpdate sa používajú na vykonávanie SQL dopytov cez JDBC, ale sú určené pre rôzne typy dopytov a vracajú rôzne výsledky.

  1. executeQuery(String sql):

    • Je určená na vykonávanie SQL dopytov typu SELECT.
    • Vracia objekt ResultSet, ktorý obsahuje výsledky dopytu.
    • Vyhadzuje výnimku SQLException, ak dopyt nie je SELECT.
    // Príklad použitia executeQuery
    String sql = "SELECT COUNT(*) FROM users";
    try (ResultSet rs = statement.executeQuery(sql)) {
        if (rs.next()) {
            int userCount = rs.getInt(1);
            System.out.println("Počet používateľov: " + userCount);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    
  2. executeUpdate(String sql):

    • Je určená na vykonávanie SQL dopytov typu INSERT, UPDATE alebo DELETE.
    • Môže byť tiež použitá na vykonávanie DDL príkazov (napr. CREATE TABLE, ALTER TABLE).
    • Vracia celé číslo (int), ktoré predstavuje počet ovplyvnených riadkov alebo 0.
    • Vyhadzuje výnimku SQLException, ak dopyt vracia ResultSet.
    // Príklad použitia executeUpdate
    String sql = "UPDATE products SET price = price * 1.1 WHERE category = 'electronics'";
    try {
        int updatedRows = statement.executeUpdate(sql);
        System.out.println("Aktualizovaných riadkov: " + updatedRows);
    } catch (SQLException e) {
        e.printStackTrace();
    }
    
  3. execute(String sql):

    • Univerzálna metóda na vykonanie akéhokoľvek typu SQL dopytu.
    • Vracia boolean: true, ak je výsledok ResultSet (pre SELECT), a false, ak je výsledok počet ovplyvnených riadkov alebo nič (pre INSERT, UPDATE, DELETE, DDL).
    • Na získanie skutočného výsledku po execute:
      • Ak execute vrátilo true, použite getResultSet() na získanie ResultSet.
      • Ak execute vrátilo false, použite getUpdateCount() na získanie počtu ovplyvnených riadkov.
    // Príklad použitia execute
    String sql = "CREATE TABLE IF NOT EXISTS logs (id INT PRIMARY KEY, message VARCHAR(255))";
    try {
        boolean isResultSet = statement.execute(sql);
        if (isResultSet) {
            // Toto je `SELECT` dopyt
            try (ResultSet rs = statement.getResultSet()) {
                // Spracovanie výsledkov
            }
        } else {
            // Toto je `INSERT`, `UPDATE`, `DELETE` alebo DDL dopyt
            int updateCount = statement.getUpdateCount();
            System.out.println("Počet ovplyvnených riadkov alebo DDL výsledok: " + updateCount);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    

V tabuľke nižšie sú uvedené hlavné rozdiely:

Metóda Typ SQL dopytu Vrátená hodnota Príklady dopytov
executeQuery SELECT ResultSet SELECT * FROM users
executeUpdate INSERT, UPDATE, DELETE, DDL int (počet ovplyvnených riadkov alebo 0) INSERT INTO, UPDATE users, DROP TABLE
execute Akýkoľvek boolean (true, ak ResultSet; false, ak nie) Akýkoľvek

Obvykle sa odporúča používať špecifickejšie metódy (executeQuery, executeUpdate), keď je typ dopytu vopred známy, pretože to zvyšuje jasnosť kódu a umožňuje kompilátoru alebo IDE vykonávať presnejšie kontroly. Metóda execute sa používa v prípadoch, keď môže byť typ dopytu dynamický alebo neznámy vopred.