Statement используется для выполнения статических SQL-запросов. Он компилируется каждый раз при выполнении.
PreparedStatement используется для выполнения параметризованных SQL-запросов. Запрос компилируется один раз при создании объекта PreparedStatement и может быть выполнен многократно с разными значениями параметров.
Основные отличия:
| Feature | Statement | PreparedStatement |
|---|---|---|
| Производительность | Компилируется при каждом выполнении. | Компилируется один раз. Более производителен при повторном использовании. |
| Безопасность | Уязвим к SQL-инъекциям при конкатенации строк. | Защищает от SQL-инъекций за счет автоматического экранирования параметров. |
| Параметры | Не поддерживает параметризованные запросы. | Поддерживает параметризованные запросы (?). |
| Читаемость | Менее читаем при работе с большим количеством данных. | Более читаем при работе с параметрами. |
Пример использования Statement:
java
Пример использования PreparedStatement:
java