Sobes.tech
Junior

Каква е разликата между методите execute, executeQuery и executeUpdate?

sobes.tech AI

Отговор от AI

executeQuery се използва за изпълнение на SELECT заявки и връща обект ResultSet с резултатите.

executeUpdate се използва за изпълнение на DML (INSERT, UPDATE, DELETE) или DDL (CREATE, ALTER, DROP) команди. Връща броя на засегнатите редове.

execute може да изпълни всеки тип SQL команда. Връща булева стойност: true, ако резултатът е ResultSet, и false в противен случай (ако е броят на актуализираните редове или няма резултат). За получаване на ResultSet се използва методът getResultSet(), а за броя на актуализираните редове — getUpdateCount().

Метод Назначение Връщан тип Примери за SQL команди
executeQuery SELECT ResultSet SELECT * FROM users
executeUpdate INSERT, UPDATE, DELETE, DDL int (броят редове) INSERT INTO users ..., UPDATE users ..., DROP TABLE users
execute Всеки тип boolean Всеки SQL команден ред

Пример за използване на executeQuery:

// Получаване на връзка
Connection conn = ...;
Statement stmt = conn.createStatement();
// Изпълнение на SELECT
ResultSet rs = stmt.executeQuery("SELECT id, name FROM users");
while (rs.next()) {
    int id = rs.getInt("id");
    String name = rs.getString("name");
    System.out.println("ID: " + id + ", Име: " + name);
}
rs.close();
stmt.close();
conn.close();

Пример за използване на executeUpdate:

// Получаване на връзка
Connection conn = ...;
Statement stmt = conn.createStatement();
// Изпълнение на INSERT
int updatedRows = stmt.executeUpdate("INSERT INTO users (name) VALUES ('John Doe')");
System.out.println("Вмъкнати редове: " + updatedRows);
stmt.close();
conn.close();

Пример за използване на execute:

// Получаване на връзка
Connection conn = ...;
Statement stmt = conn.createStatement();
// Изпълнение на DDL
boolean isResultSet = stmt.execute("CREATE TABLE products (id INT PRIMARY KEY, name VARCHAR(255))");
if (!isResultSet) {
    System.out.println("Брой засегнати редове или създаден таблица: " + stmt.getUpdateCount());
}
stmt.close();
conn.close();