void doSomething(batchSize, someList){
def db = new Sql(datasource)
db.withTransaction{
db.withBatch(batchSize){ stmt ->
someList.each {
String sqlStr = ""
// do something and prepare sqlStr
stmt.addBatch(sqlStr)
}
}
}
}
我正在调用这个函数,当再次查询时,我得到的是旧数据,即使数据库已经更新。可能是什么问题 ??是 withBatch asynchronus 还是什么??
在 PreparedStatement 上调用 executeBatch 方法之前,批处理不会执行。确保您在该闭包结束时调用 executeBatch。 试试这个:
void doSomething(batchSize, someList) {
def db = new Sql(datasource)
db.withTransaction {
db.withBatch(batchSize) { stmt ->
someList.each {
String sqlStr = ""
// do something and prepare sqlStr
stmt.addBatch(sqlStr)
}
stmt.executeBatch() // Execute the batch after adding all statements
}
}
}
在此实现中,在添加所有批处理语句后对 PreparedStatement 对象 stmt 调用 executeBatch()。这会将所有批处理的 SQL 语句作为单个操作执行。
关于你关于 withBatch 方法的问题,默认情况下它不是异步的。 withBatch 方法是同步执行的,每条批处理语句按顺序添加到批处理中。希望这有帮助