Sobes.tech
Junior

Kuo skiriasi execute, executeQuery ir executeUpdate metodai?

sobes.tech AI

Atsakymas iš AI

execute, executeQuery ir executeUpdate metodai naudojami SQL užklausų vykdymui per JDBC, tačiau skirti skirtingų tipų užklausoms ir grąžina skirtingus rezultatus:

  1. executeQuery(String sql):

    • skirtas SELECT tipo SQL užklausoms:
    • grąžina ResultSet objektą, kuriame yra užklausos rezultatai:
    • išmeta SQLException, jei užklausa nėra SELECT:
    // `executeQuery` pavyzdys
    String sql = "SELECT COUNT(*) FROM users";
    try (ResultSet rs = statement.executeQuery(sql)) {
        if (rs.next()) {
            int userCount = rs.getInt(1);
            System.out.println("Naudotojų skaičius: " + userCount);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    
  2. executeUpdate(String sql):

    • skirtas INSERT, UPDATE ar DELETE tipo SQL užklausoms:
    • taip pat gali būti naudojamas DDL komandų (pvz., CREATE TABLE, ALTER TABLE) vykdymui:
    • grąžina sveiką skaičių (int), kuris nurodo pakeistų eilučių skaičių (INSERT, UPDATE, DELETE) arba 0 (DML atveju):
    • išmeta SQLException, jei užklausa grąžina ResultSet:
    // `executeUpdate` pavyzdys
    String sql = "UPDATE products SET price = price * 1.1 WHERE category = 'electronics'";
    try {
        int updatedRows = statement.executeUpdate(sql);
        System.out.println("Pakeistų eilučių skaičius: " + updatedRows);
    } catch (SQLException e) {
        e.printStackTrace();
    }
    
  3. execute(String sql):

    • universalus metodas bet kokio tipo SQL užklausai vykdyti:
    • grąžina boolean: true, jei rezultatas yra ResultSet (t.y., SELECT), ir false, jei rezultatas yra pakeistų eilučių skaičius arba nieko:
    • norint gauti faktinį rezultatą po execute:
      • jei execute grąžino true, naudoti getResultSet() rezultatų gavimui;
      • jei execute grąžino false, naudoti getUpdateCount() pakeistų eilučių skaičiui gauti;
    // `execute` pavyzdys
    String sql = "CREATE TABLE IF NOT EXISTS logs (id INT PRIMARY KEY, message VARCHAR(255))";
    try {
        boolean isResultSet = statement.execute(sql);
        if (isResultSet) {
            // Tai yra SELECT užklausa
            try (ResultSet rs = statement.getResultSet()) {
                // rezultatų apdorojimas
            }
        } else {
            // Tai yra INSERT, UPDATE, DELETE arba DDL užklausa
            int updateCount = statement.getUpdateCount();
            System.out.println("Pakeistų eilučių arba DDL rezultatas: " + updateCount);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    

Žemiau pateikiami pagrindiniai skirtumai:

Metodas SQL užklausos tipas Grąžinamas rezultatas Pavyzdiniai užklausos tipai
executeQuery SELECT ResultSet SELECT * FROM users
executeUpdate INSERT, UPDATE, DELETE, DDL int (pakeistų eilučių skaičius arba 0) INSERT INTO, UPDATE users, DROP TABLE
execute Bet kuris boolean (jei ResultSet, tada true; kitaip false) Bet kuris

Dažniausiai rekomenduojama naudoti specifinius metodus (executeQuery, executeUpdate), kai užklausos tipas žinomas iš anksto, nes tai didina kodo aiškumą ir leidžia kompiliatoriui ar IDE atlikti tikslesnius patikrinimus. execute metodas naudojamas, kai užklausos tipas gali būti dinamiškas arba nežinomas iš anksto.