Sobes.tech
Junior

execute, executeQuery ve executeUpdate metodları arasındaki fark nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

execute, executeQuery ve executeUpdate metodları, JDBC aracılığıyla SQL sorgularını yürütmek için kullanılır, ancak farklı sorgu türleri için tasarlanmışlardır ve farklı sonuçlar döndürürler.

  1. executeQuery(String sql):

    • SELECT türündeki SQL sorgularını yürütmek için tasarlanmıştır.
    • Sorgu sonuçlarını içeren bir ResultSet nesnesi döner.
    • Sorgu SELECT değilse SQLException fırlatır.
    // executeQuery kullanım örneği
    String sql = "SELECT COUNT(*) FROM users";
    try (ResultSet rs = statement.executeQuery(sql)) {
        if (rs.next()) {
            int userCount = rs.getInt(1);
            System.out.println("Kullanıcı sayısı: " + userCount);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    
  2. executeUpdate(String sql):

    • INSERT, UPDATE veya DELETE türündeki SQL sorgularını yürütmek için tasarlanmıştır.
    • Ayrıca DDL komutları (CREATE TABLE, ALTER TABLE) için de kullanılabilir.
    • Etkilenen satır sayısını temsil eden bir int döner (INSERT, UPDATE, DELETE için) veya 0 (DDL komutları için).
    • Sorgu ResultSet döndürüyorsa SQLException fırlatır.
    // executeUpdate kullanım örneği
    String sql = "UPDATE products SET price = price * 1.1 WHERE category = 'electronics'";
    try {
        int updatedRows = statement.executeUpdate(sql);
        System.out.println("Güncellenen satır sayısı: " + updatedRows);
    } catch (SQLException e) {
        e.printStackTrace();
    }
    
  3. execute(String sql):

    • Her türlü SQL sorgusunu yürütmek için evrensel bir yöntem.
    • boolean döner: true ise sonuç ResultSet'dir (örneğin SELECT için), false ise sonuç etkilenen satır sayısı veya hiçbir şey döndürmeyen sorgudur (INSERT, UPDATE, DELETE, DDL).
    • execute sonrası gerçek sonucu almak için:
      • execute true dönerse, getResultSet() kullanılarak ResultSet alınır.
      • execute false dönerse, getUpdateCount() kullanılarak etkilenen satır sayısı alınır.
    // execute kullanımı örneği
    String sql = "CREATE TABLE IF NOT EXISTS logs (id INT PRIMARY KEY, message VARCHAR(255))";
    try {
        boolean isResultSet = statement.execute(sql);
        if (isResultSet) {
            // Bu bir SELECT sorgusudur
            try (ResultSet rs = statement.getResultSet()) {
                // Sonuçlar işlenir
            }
        } else {
            // Bu bir INSERT, UPDATE, DELETE veya DDL sorgusudur
            int updateCount = statement.getUpdateCount();
            System.out.println("Etkilenen satırlar veya DDL sonucu: " + updateCount);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    

Aşağıdaki tabloda temel farklar gösterilmektedir:

Yöntem SQL sorgu türü Dönen değer Sorgu örnekleri
executeQuery SELECT ResultSet SELECT * FROM users
executeUpdate INSERT, UPDATE, DELETE, DDL int (etkilenen satır sayısı veya 0) INSERT INTO, UPDATE users, DROP TABLE
execute Herhangi bir tür boolean (true ResultSet ise; false değilse) Herhangi

Genellikle, sorgu türü önceden biliniyorsa (executeQuery, executeUpdate) daha özelleştirilmiş metodların kullanılması önerilir, çünkü bu kodun açıklığını artırır ve derleyici veya IDE tarafından daha doğru kontroller yapılmasını sağlar. execute metodu, sorgu türü dinamik veya önceden bilinmiyorsa kullanılır.