Sobes.tech
Junior

Kāda ir atšķirība starp metodēm execute, executeQuery un executeUpdate?

sobes.tech AI

Atbilde no AI

execute, executeQuery un executeUpdate metodes tiek JDBC, bet tās ir paredzētas dažādiem SQL vaicājumu veidiem un atgriež dažādus rezultātus:

  1. executeQuery(String sql):

    • paredzēts SELECT tipa SQL vaicājumiem:
    • atgriež ResultSet objektu, kas satur vaicājuma rezultātus:
    • izmet SQLException, ja vaicājums nav SELECT:
    // `executeQuery` piemērs
    String sql = "SELECT COUNT(*) FROM users";
    try (ResultSet rs = statement.executeQuery(sql)) {
        if (rs.next()) {
            int userCount = rs.getInt(1);
            System.out.println("Lietotāju skaits: " + userCount);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    
  2. executeUpdate(String sql):

    • paredzēts INSERT, UPDATE vai DELETE tipa SQL vaicājumiem:
    • arī var tikt izmantots DDL komandu (piem., CREATE TABLE, ALTER TABLE) izpildei:
    • atgriež veselu skaitli (int), kas norāda mainīto rindu skaitu (INSERT, UPDATE, DELETE) vai 0 (DML gadījumā):
    • izmet SQLException, ja vaicājums atgriež ResultSet:
    // `executeUpdate` piemērs
    String sql = "UPDATE products SET price = price * 1.1 WHERE category = 'electronics'";
    try {
        int updatedRows = statement.executeUpdate(sql);
        System.out.println("Mainīto rindu skaits: " + updatedRows);
    } catch (SQLException e) {
        e.printStackTrace();
    }
    
  3. execute(String sql):

    • universāla metode jebkura veida SQL vaicājuma izpildei:
    • atgriež boolean: ja rezultāts ir ResultSet, tad true; ja ir mainīto rindu skaits vai nekas, tad false:
    • lai iegūtu faktiskos rezultātus pēc execute:
      • ja execute atgrieza true, izmanto getResultSet() rezultātu iegūšanai;
      • ja execute atgrieza false, izmanto getUpdateCount() mainīto rindu skaita iegūšanai;
    // `execute` piemērs
    String sql = "CREATE TABLE IF NOT EXISTS logs (id INT PRIMARY KEY, message VARCHAR(255))";
    try {
        boolean isResultSet = statement.execute(sql);
        if (isResultSet) {
            // Tas ir SELECT vaicājums
            try (ResultSet rs = statement.getResultSet()) {
                // rezultātu apstrāde
            }
        } else {
            // Tas ir INSERT, UPDATE, DELETE vai DDL vaicājums
            int updateCount = statement.getUpdateCount();
            System.out.println("Mainīto rindu vai DDL rezultāts: " + updateCount);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    

Zemāk ir galvenās atšķirības:

Metode SQL vaicājuma veids Atgrieztā vērtība Piemēri vaicājumiem
executeQuery SELECT ResultSet SELECT * FROM users
executeUpdate INSERT, UPDATE, DELETE, DDL int (mainīto rindu skaits vai 0) INSERT INTO, UPDATE users, DROP TABLE
execute Jebkurš boolean (ja ResultSet, tad true; citādi) Jebkurš

Kopumā ieteicams izmantot specifiskākas metodes (executeQuery, executeUpdate), kad vaicājuma veids ir iepriekš zināms, jo tas uzlabo koda skaidrību un ļauj kompilatoram vai IDE veikt precīzākas pārbaudes. execute metode tiek izmantota gadījumos, kad vaicājuma veids var būt dinamisks vai nezināms iepriekš.