456 подписчиков
Statement и PreparedStatement - это два класса, которые используются для выполнения запросов к базе данных в Java. Основная разница между ними заключается в том, как они обрабатывают параметры запроса. Statement используется для создания статического SQL-запроса без параметров. Такой запрос выполняется каждый раз при вызове метода execute() объекта Statement. Например: Statement stmt = connection.createStatement(); String sql = "SELECT * FROM users WHERE name = 'John'"; ResultSet rs = stmt.executeQuery(sql); PreparedStatement же позволяет создавать динамический SQL-запрос с параметрами...
1 год назад
204 подписчика
Подготовленные запросы

Давно и с наслаждением использую prepared statement при работе с базами данных. Как по мне - это реально удобно, да и фича делает запрос более читабельным, если конечно ваша либа для работы с sql умеет именованные параметры.

Условно хорошо, когда:

INSERT INTO … VALUES ( :name, :productId )

А вот это - нечитаемое говно, конечно (особенно, когда параметров много):

INSERT INTO … VALUES ( $1, $2 )

Тему ускорения работы подготовленных запросов я затрагивать не буду, там много нюансов. Мне такие запросы нравятся скорее за безопасность и удобство.

Один случай был, в PostgreSQL 9.6 мы как-то раз столкнулись с адской проблемой. Секционированные таблицы на основе наследования абстрактной таблицы и констреинтов отказывались идти в нужную таблицу, если значение секционированного поля передавалось как prepared statement параметр. Секционирование было на основе даты. С тех пор много воды утекло и много версий pg сменилось, но осадочек остался - би кэрефул, короч.
1 год назад