我想从一个表中选择数据并使用不同的sql连接批量插入另一个表。这两个表的设置完全相同。目前我有:
destination.withBatch(1000) { stmt ->
source.eachRow(selectQuery) {
String insertString = """
INSERT INTO dest_table
VALUES (
${it[0]},
${it[1]});
"""
try {
stmt.addBatch(insertString)
}
catch (Exception e) {
println insertString
}
}
}
这个过程中的数据类型似乎发生了一些事情,因为由于冒号而插入像'a:string'
这样的字符串会非常不快。
我可以'${it[0]}'
强制执行它被视为一个字符串,但是当我来到其他数据类型时会出现问题。
此外,我的错误处理肯定无法正常工作。我希望它打印出它无法执行的插入,然后优雅地继续。
由于
答案 0 :(得分:1)
groovy sql很可能是从你的sql字符串创建一个预准备语句,并且其中带有冒号的任何东西都被解析为参数占位符。
所以,我建议使用流程,并分别绑定数据值,而不是将它们内联在sql语句中。这也可能会提高性能,因为准备好的语句可以由数据库缓存。