如何正确使用AddBatch / withBatch将xml标记值批量插入数据库表

时间:2017-04-12 08:33:25

标签: xml database oracle groovy soapui

' innerXml'是一个包含大量xml标记的xml文件。我正在尝试获取标记值并将其转储到数据库表中。 我试过下面的代码,它工作正常。

innerXml.Row.each { Row ->

sql.execute("INSERT INTO tab1(col1,col2) VALUES (${Row.Column0.text()},${Row.Column1.text()} )")    

但是因为有大量的xml标签导致性能问题逐一插入记录。正如专家建议我尝试使用withBatch来提高性能。请使用withBatch找到下面的代码:

sql.withBatch(386, """  insert into tab1(col1,col2) values (?, ?) """) { ps ->   innerXml.Row.each { Row ->ps.addBatch(${Row.Column0.text()} ,${Row.Column1.text()})  }}

但我收到以下错误:

groovy.lang.MissingMethodException: No signature of method: Script41.$() is applicable for argument types: (Script41$_run_closure2_closure3_closure4) values: [Script41$_run_closure2_closure3_closure4@23724e8d] Possible solutions: is(java.lang.Object), run(), run(), any(), use([Ljava.lang.Object;), any(groovy.lang.Closure) error at line: 38

请帮忙

先谢谢!!

1 个答案:

答案 0 :(得分:1)

你需要这样做:

// 386 is an odd batch size?
sql.withBatch(386, 'insert into tab1(col1,col2) values (?, ?)') { ps ->
    innerXml.Row.each { row ->
        ps.addBatch(row.Column0.text(), row.Column1.text())
    }
}