我有这样的代码
def myMap = [key1 : val1, key2 : val2]
sql.executeInsert("Insert into tableName(key1, key2) Values(?, ?)", myMap)
我想创建一个方法来处理我传入的任何映射。就像在,它应该能够创建一个insert语句,其中键的值正确映射,最重要的是sql注入安全。但是我可以找到的所有插入操作的示例都不是注入安全的,或者是硬编码到特定值。
例如,这是一个以非注入安全方式http://www.bloggure.info/.groovy/work/quickly-insert-data-to-a-sql-database-in-groovy/
执行此操作的示例答案 0 :(得分:1)
你应该可以这样做:
import groovy.sql.*
def myMap = [key1 : 'val1', key2 : 'val2']
def generateSql(Map map) {
Closure<String> keys = { -> map.keySet().collect { Sql.expand(it) }.join(', ') }
Closure<String> values = { -> map.keySet().collect { ":${it}" }.join(', ') }
"insert into tablename(${keys()}) values(${values()})"
}
sql.executeInsert(generateSql(myMap), myMap)