← Назад к вопросам

Для каких операций больше подходит executeUpdate

1.0 Junior🔥 141 комментариев
#Базы данных и SQL

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

# executeUpdate в JDBC: назначение и применение

Основное назначение

executeUpdate() — это метод интерфейса Statement в JDBC, который предназначен для выполнения SQL-операций, не возвращающих результирующий набор данных. Он возвращает целое число, указывающее количество затронутых строк.

Для каких операций используется

1. INSERT (вставка данных)

Используется для добавления новых записей в таблицу:

Statement stmt = connection.createStatement();
String sql = "INSERT INTO users (name, email, age) VALUES ('Ivan', 'ivan@mail.com', 25)";
int affectedRows = stmt.executeUpdate(sql);
System.out.println("Вставлено строк: " + affectedRows); // 1

2. UPDATE (обновление данных)

Для изменения существующих записей:

Statement stmt = connection.createStatement();
String sql = "UPDATE users SET age = 26 WHERE name = 'Ivan'";
int affectedRows = stmt.executeUpdate(sql);
System.out.println("Обновлено строк: " + affectedRows);

3. DELETE (удаление данных)

Для удаления записей из таблицы:

Statement stmt = connection.createStatement();
String sql = "DELETE FROM users WHERE age < 18";
int affectedRows = stmt.executeUpdate(sql);
System.out.println("Удалено строк: " + affectedRows);

4. DDL операции (CREATE, ALTER, DROP)

Для создания, изменения и удаления структур БД:

Statement stmt = connection.createStatement();
String sql = "CREATE TABLE logs (id INT PRIMARY KEY, message VARCHAR(255))";
stmt.executeUpdate(sql); // Возвращает 0 для DDL операций

Когда НЕ использовать executeUpdate

executeQuery() используется для SELECT запросов, возвращающих ResultSet:

// Неправильно
stmt.executeUpdate("SELECT * FROM users");

// Правильно
ResultSet rs = stmt.executeQuery("SELECT * FROM users");

Возвращаемое значение

  • Для INSERT/UPDATE/DELETE: количество затронутых строк
  • Для DDL операций: всегда возвращает 0
  • JDBC драйверы могут вернуть -1 для неизвестного количества затронутых строк

Пример с PreparedStatement (рекомендуется)

Лучшая практика — использовать PreparedStatement для избежания SQL-инъекций:

String sql = "INSERT INTO users (name, email, age) VALUES (?, ?, ?)";
PreparedStatement pstmt = connection.prepareStatement(sql);
pstmt.setString(1, "Ivan");
pstmt.setString(2, "ivan@mail.com");
pstmt.setInt(3, 25);
int affectedRows = pstmt.executeUpdate();
System.out.println("Вставлено: " + affectedRows);

Резюме

executeUpdate() подходит для INSERT, UPDATE, DELETE и DDL операций. Основное различие с executeQuery() — возврат количества затронутых строк вместо результирующего набора. Всегда используйте PreparedStatement для безопасности.