Ska*_*rab 1 sql groovy gstring
我有以下问题,当我将GString传递给SQL.executeInsert时,文本变量不会被自动索引,'因此插入查询失败:
String value4fa = "I would like to get know"
int value4fb = 2
def query = "INSERT INTO TAB_A (F_A, F_B) VALUES (${value4fa}, ${value4fb})"
sql.executeInsert(query);
如果我'自己放:
 def query = "INSERT INTO TAB_A (F_A, F_B) VALUES ('${value4fa}', ${value4fb})"
Groovy告诉我,我已经引入了一个安全漏洞,因为Groovy不能使用PreparedStatement来执行SQL查询.
任何人都可以解释我如何强制Groovy正确评估查询正文并准备变量?
小智 5
你不应该用任何东西装饰字符串以PreparedStatement自动转换它们.
sql.execute("INSERT INTO TAB_A (F_A, F_B) VALUES ($value4fa, $value4fb)")
将为接受GString单个参数的所有方法做正确的事情.注意缺乏的{}是语法糖.toString()
你的投诉原因是,
def query = "INSERT INTO TAB_A (F_A, F_B) VALUES (${value4fa}, ${value4fb})"
sql.execute(query)
不同于GString直接传递给方法.
它在传递query给.execute()方法之前应用替换.根据您的示例数据,它会传递以下内容并且已经发生了替换."INSERT INTO TAB_A (F_A, F_B) VALUES (I would like to get know, 2)"这甚至不是一个有效的SQL语句,因为'它周围缺少字符串值.
这在功能上等同于使用String.format(),StringBuilder/Buffer.append()或者在连接时使用+.
| 归档时间: | 
 | 
| 查看次数: | 3317 次 | 
| 最近记录: |