gpt4 book ai didi

java - simpleJDBCTemplate 不替换带引号的参数

转载 作者:行者123 更新时间:2023-11-30 05:11:17 25 4
gpt4 key购买 nike

我正在使用 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 参数替换为其值,但我不确定这有多安全。

你会如何解决这个问题?

最佳答案

Spring 将跳过 SQL 中引号内的任何内容(请参阅 NamedParameterUtilsskipCommentsAndQuotes() 方法),因为不应触及引号内的任何内容.

在这种情况下这是有道理的 - 你会希望准备好的声明说

functionThatTakesAText(?)

而不是

functionThatTakesAText('?')

尝试删除那里的引号,占位符应该被正确替换。

关于java - simpleJDBCTemplate 不替换带引号的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3281839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com