Что такое PreparedStatement в JDBC?

«Что такое PreparedStatement в JDBC?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Основные преимущества:

  1. Защита от SQL-инъекций: Параметры передаются отдельно от запроса, экранируясь драйвером БД.
  2. Производительность: Запрос компилируется один раз на стороне СУБД и может выполняться многократно с разными параметрами.
  3. Удобство: Автоматическое преобразование типов Java в SQL-типы.

Пример использования:

String sql = "SELECT id, name FROM users WHERE email = ? AND status = ?";
try (PreparedStatement stmt = connection.prepareStatement(sql)) {
    stmt.setString(1, "user@example.com"); // Установка параметра 1
    stmt.setString(2, "ACTIVE");           // Установка параметра 2
    ResultSet rs = stmt.executeQuery();
    while (rs.next()) {
        // Обработка результатов
    }
}
Сравнение с Statement: PreparedStatement Statement
Параметризованный запрос (?) Конкатенация строк для параметров
Защищён от SQL-инъекций Уязвим к SQL-инъекциям
Высокая производительность при повторном использовании Каждый запрос компилируется заново
Подходит для любых данных, включая бинарные Сложно работать со специальными символами