Параметрические запросы в JDBC

В предыдущей статье о работе с базами данных в Java были использованы обычные запросы, которые передавались в объект Statement в виде готовой строки. Такой подход прост в применении, но в тоже время его использование нежелательно. В том числе из соображений безопасности.

Поэтому в случае необходимости передачи в запрос данных из программы лучше использовать параметрические запросы.

Работа с параметрическими запросами в JDBC осуществляется с помощью объекта PreparedStatement.

Для его создания используется метод prepareStatement объекта Connection, который принимает в качестве единственного параметра строку с текстом запроса (требуется обработка исключения SQLException). При этом параметры в запросе обозначаются символом «?».

PreparedStatement не поддерживает именованные параметры. Поэтому обращение к параметрам при присвоении им значений осуществляется по их индексу. Индекса соответствует положению параметров от начала строки запроса и начинается с 1. То есть ближайший параметр к началу строки запроса будет иметь индекс 1, следующий после него 2 и т.д.

Присвоение значений параметра осуществляется при помощи сеттеров с именами setXXX, где вместо XXX тип данных, которые будут переданы в данный параметр.

Например, присвоение параметру строкового значения:

Выполнение параметрического запроса ничем не отличается от обычного за исключением того, что объект PreparedStatement имеет специальные перегрузки методов execute и executeQuery, для выполнения параметрических запросов. Эти перегрузки не принимают никаких параметров.

Следует отметить ещё одну важную особенность параметрических запросов.

С помощью объекта PreparedStatement можно передавать в параметры запроса двоичные данные, что делает его незаменимым помощником при работе с полями таблиц типа BLOB.

Для передачи в параметр запроса двоичных данных предназначены сеттеры setBytes и setBinaryStream. Отличие последнего сеттера в том, что он работает с потоком двоичных данных и может принимать (для некоторых перегрузок) дополнительный параметр – количество байтов передаваемых в потоке.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *