Gymterview
junior

Чем отличается Statement от PreparedStatement

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

Критерий Statement PreparedStatement
Параметры Нет (значения вставляются в строку SQL) Да (параметры подставляются через ?)
Компиляция Каждый раз заново Однократно, план кэшируется СУБД
SQL Injection Уязвим Защищён
Повторное использование Неэффективно Эффективно при повторных вызовах
Когда использовать DDL, одноразовые запросы DML, параметризованные запросы

Перед выполнением СУБД разбирает каждый запрос, оптимизирует его и создает план (query plan) выполнения. Если один и тот же запрос выполняется несколько раз, СУБД может кэшировать план и не производить этапов разборки и оптимизации повторно.

PreparedStatement выгодно отличается от Statement тем, что при повторном использовании с одним или несколькими наборами параметров позволяет получить преимущества заранее прекомпилированного и кэшированного запроса, помогая при этом избежать SQL Injection.

На собеседовании: два ключевых отличия: (1) PreparedStatement защищает от SQL Injection, (2) запрос компилируется один раз и переиспользуется. Правило: всегда используйте PreparedStatement, кроме случаев DDL без параметров.