Ответ
PreparedStatement — это интерфейс JDBC, представляющий предкомпилированный SQL-запрос с параметрами-заполнителями (?). Он является предпочтительным способом выполнения параметризованных запросов.
Основные преимущества:
- Защита от SQL-инъекций: Параметры передаются отдельно от запроса, экранируясь драйвером БД.
- Производительность: Запрос компилируется один раз на стороне СУБД и может выполняться многократно с разными параметрами.
- Удобство: Автоматическое преобразование типов 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-инъекциям | |
| Высокая производительность при повторном использовании | Каждый запрос компилируется заново | |
| Подходит для любых данных, включая бинарные | Сложно работать со специальными символами |