无法使用groovy sql迁移数据库表

时间:2012-02-01 14:18:09

标签: groovy batch-processing

我想从一个表中选择数据并使用不同的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]}'强制执行它被视为一个字符串,但是当我来到其他数据类型时会出现问题。

此外,我的错误处理肯定无法正常工作。我希望它打印出它无法执行的插入,然后优雅地继续。

由于

1 个答案:

答案 0 :(得分:1)

groovy sql很可能是从你的sql字符串创建一个预准备语句,并且其中带有冒号的任何东西都被解析为参数占位符。

所以,我建议使用流程,并分别绑定数据值,而不是将它们内联在sql语句中。这也可能会提高性能,因为准备好的语句可以由数据库缓存。