Ответ 1
Как упоминается kd304 в комментарии к моей публикации, это очень приятное решение, если вы не хотите включать в свой проект другую стороннюю библиотеку (например, Spring): Javaworld Article: Именованные параметры для PreparedStatement
Во многих языках программирования для подготовленных операторов возможно что-то подобное:
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
Как упоминается kd304 в комментарии к моей публикации, это очень приятное решение, если вы не хотите включать в свой проект другую стороннюю библиотеку (например, Spring): Javaworld Article: Именованные параметры для PreparedStatement
Стандартные JDBC PreparedStatements не обладают этой способностью. Spring JDBC предоставляет эту функциональность через NamedParameterJdbcTemplate
.
Используя исходное PreparedStatement, это невозможно, как вы говорите. Это возможно с помощью CallableStatement, но для этого требуется хранимая процедура, а не только оператор SQL.
Уровни ORM, такие как Hibernate, также предоставляют именованную подстановку параметров, а Hibernate также позволяет выполнять собственный SQL, полностью обходя функциональность отображения OR.
Итак, если вы действительно хотели использовать именованные параметры, вы можете использовать Hibernate как способ сделать это; вы будете использовать лишь небольшую часть своей функциональности.