Sobes.tech
Junior

Фарқи байни усулҳои execute, executeQuery ва executeUpdate чист?

sobes.tech AI

Ҷавоб аз AI

Методҳои execute, executeQuery ва executeUpdate барои иҷрои дархостҳои SQL тавассути JDBC истифода мешаванд, аммо барои намудҳои гуногуни дархостҳо пешбинӣ шудаанд ва натиҷаҳои гуногун меоранд.

  1. executeQuery(String sql):

    • Барои иҷрои дархостҳои SQL аз навъи SELECT пешбинӣ шудааст.
    • Объекти ResultSet-ро бармегардонад, ки натиҷаҳои дархостро дар бар мегирад.
    • Иҷрои истиснои SQLException мекунад, агар дархост SELECT набошад.
    // Намунаи истифодаи executeQuery
    String sql = "SELECT COUNT(*) FROM users";
    try (ResultSet rs = statement.executeQuery(sql)) {
        if (rs.next()) {
            int userCount = rs.getInt(1);
            System.out.println("Шумораи корбарон: " + userCount);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    
  2. executeUpdate(String sql):

    • Барои иҷрои дархостҳои SQL аз навъи INSERT, UPDATE ё DELETE пешбинӣ шудааст.
    • Ҳамчунин барои иҷрои фармонҳои DDL (масалан, CREATE TABLE, ALTER TABLE) истифода мешавад.
    • Ба қайд гирифта мешавад, ки натиҷа як рақами бутун (int) мебошад, ки шумораи сатрҳои таъсиррасонро ё 0-ро нишон медиҳад.
    • Иҷрои истиснои SQLException мекунад, агар дархост ResultSet баргардонад.
    // Намунаи истифодаи 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):

    • Методи умумӣ барои иҷрои ҳар гуна навъи дархост.
    • boolean баргардон мекунад: true агар натиҷа ResultSet бошад (барои SELECT), ва false агар натиҷа шумораи сатрҳои таъсиррасон ё чизе набошад (барои INSERT, UPDATE, DELETE, DDL).
    • Барои гирифтани натиҷаи воқеӣ пас аз execute:
      • Агар execute true баргардонд, истифода баред getResultSet() барои гирифтани ResultSet.
      • Агар execute false баргардонд, истифода баред getUpdateCount() барои гирифтани шумораи сатрҳои таъсиррасон.
    // Намунаи истифодаи 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) беҳтар аст, зеро ин равшанӣ ва назорати бештарро таъмин мекунад. Метод execute дар ҳолатҳои, ки навъи дархост динамикӣ ё пешакӣ маълум нест, истифода мешавад.