Jar*_*red 7 groovy jdbc batch-processing
在模拟预处理语句时如何使用groovy Sql进行批量插入?我发现的所有示例都与以下内容类似,不使用预处理语句.
withBatch { stmt ->
stmt.addBatch("insert into table (field1,field2) values('value1','value2')")
stmt.addBatch("insert into table (field1,field2) values('value3','value4')")
}
Run Code Online (Sandbox Code Playgroud)
根据此链接http://jira.codehaus.org/browse/GROOVY-3504,无法直接从批处理中使用预准备语句.模拟这个的最佳方法是什么,所以我可以避免编写自己的代码以避免sql注入?
top*_*hef 20
Groovy 1.8.1引入了对具有批处理的预准备语句的支持.简单的例子:
sql.withBatch(20, """update some_table
set some_column = :newvalue
where id = :key """) { ps ->
mymap.each { k,v ->
ps.addBatch(key:k, newvalue:v)
}
}
Run Code Online (Sandbox Code Playgroud)
另请参阅我关于该主题的帖子:http://novyden.blogspot.com/2011/09/groovy-batch-prepared-statement-nice.html
相关的还有https://issues.apache.org/jira/browse/GROOVY-4328。
从上面的 JIRA 中:
...我们能(简单地)做的最好的事情就是将这样的 GString 转换为普通的 String。为此,我们可以比目前做的更多一些,通过解析字符串并尝试引用或转义“字符串”看起来的东西,而不是数字或日期看起来的东西,但这可能不是很优雅。通常我们会使用“?” 字符占位符和准备好的声明,要做的事情就少得多
关于模拟prepared statements,请参阅Java - 转义字符串以防止SQL注入
话虽这么说,您可以应用上面的启发式方法并装饰该withBatch方法
| 归档时间: |
|
| 查看次数: |
15626 次 |
| 最近记录: |