Подтвердить что ты не робот

Использование переменной вместо индекса параметра с помощью подготовленного оператора JDBC

Во многих языках программирования для подготовленных операторов возможно что-то подобное:

PreparedStatement statement = connection.prepareStatement(
    "SELECT id FROM Company WHERE name LIKE ${name}");
statement.setString("name", "IBM");

Но не с java.sql.PreparedStatement. В Java нужно использовать индексы параметров:

PreparedStatement statement = connection.prepareStatement(
    "SELECT id FROM Company WHERE name LIKE ?");
statement.setString(1, "IBM");

Есть ли решение для работы со строковыми переменными, как в первом примере? Является ли "$ {. *}" Не использоваться где-то еще на языке SQL или конфликты? Потому что тогда я бы реализовал его сам (разбор строки SQL и замена каждой переменной на "?", А затем выполнение этого пути Java).

С уважением, Kai

4b9b3361

Ответ 2

Стандартные JDBC PreparedStatements не обладают этой способностью. Spring JDBC предоставляет эту функциональность через NamedParameterJdbcTemplate.

Ответ 3

Используя исходное PreparedStatement, это невозможно, как вы говорите. Это возможно с помощью CallableStatement, но для этого требуется хранимая процедура, а не только оператор SQL.

Уровни ORM, такие как Hibernate, также предоставляют именованную подстановку параметров, а Hibernate также позволяет выполнять собственный SQL, полностью обходя функциональность отображения OR.

Итак, если вы действительно хотели использовать именованные параметры, вы можете использовать Hibernate как способ сделать это; вы будете использовать лишь небольшую часть своей функциональности.