simpleJDBCTemplate не заменяет указанный параметр - PullRequest
1 голос
/ 19 июля 2010

Я использую simpleJDBCTemplate для вставки значения в базу данных postgre.

String sql "insert into testTable values(:bla, :blah, functionThatTakesAText(':blu'))"
BeanPropertySqlParameterSource namedParameters = new BeanPropertySqlParameterSource(lighting);
simpleJdbcTemplate.update(sql, namedParameters);

Теперь параметр blu на самом деле представляет собой число (фактическое значение sql принимает 2 вещественных числа), которое читается из файла, предоставленного клиентом.

В результате база данных получает что-то вроде следующего:

insert into testTable values(?, ?, functionThatTakesAText(':blu'))

и не может заменить параметр: blu, как ожидалось.

Текущий обходной путь, который я использую, - это замена параметра blu его значением с помощью регулярного выражения, но я не уверен, насколько это безопасно.

Как бы вы решили это?

1 Ответ

2 голосов
/ 19 июля 2010

Spring пропустит все, что находится внутри кавычек в SQL (см. skipCommentsAndQuotes() метод NamedParameterUtils), на том основании, что ничего внутри кавычек не следует трогать.

Это имеет смысл в этомконтекст - вы хотите, чтобы подготовленный оператор говорил

functionThatTakesAText(?)

, а не

functionThatTakesAText('?')

Попробуйте удалить там кавычки, и заполнитель должен быть заменен правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...