simpleJDBCTemplate, не заменяющий заключенный в кавычки параметр

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

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

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

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

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

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

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

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

1
задан skaffman 19 July 2010 в 14:19
поделиться

1 ответ

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

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

functionThatTakesAText(?)

, а не

functionThatTakesAText('?')

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

2
ответ дан 2 September 2019 в 22:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: