groovy mysql批量保存数据无效问题

本文详细介绍了如何在Groovy中使用withBatch方法进行批量执行SQL,特别针对InnoDB引擎下MySQL的autoCommit特性进行了优化,包括设置autoCommit为0、执行SQL后再提交数据。
摘要由CSDN通过智能技术生成

Groovy Sql 批量执行withBatch

sql.withBatch(3) { stmt ->
  stmt.addBatch "INSERT INTO Author (firstname, lastname) VALUES ('Dierk', 'Koenig')"
  stmt.addBatch "INSERT INTO Author (firstname, lastname) VALUES ('Paul', 'King')"
  stmt.addBatch "INSERT INTO Author (firstname, lastname) VALUES ('Guillaume', 'Laforge')"
  stmt.addBatch "INSERT INTO Author (firstname, lastname) VALUES ('Hamlet', 'D''Arcy')"
  stmt.addBatch "INSERT INTO Author (firstname, lastname) VALUES ('Cedric', 'Champeau')"
  stmt.addBatch "INSERT INTO Author (firstname, lastname) VALUES ('Erik', 'Pragt')"
  stmt.addBatch "INSERT INTO Author (firstname, lastname) VALUES ('Jon', 'Skeet')"
}

sql.withBatch 有两个参数,第二个参数为要执行操作的闭包,第一个整形的参数,表示每次的执行量。例如代码中的3,就表示调用3次addBatch方法之后,就会执行一次插入操作。

Groovy 批量执行预编译Sql

def qry = 'INSERT INTO Author (firstname, lastname) VALUES (?,?)'
sql.withBatch(3, qry) { ps ->
  ps.addBatch('Dierk', 'Koenig')
  ps.addBatch('Paul', 'King')
  ps.addBatch('Guillaume', 'Laforge')
  ps.addBatch('Hamlet', "D'Arcy")
  ps.addBatch('Cedric', 'Champeau')
  ps.addBatch('Erik', 'Pragt')
  ps.addBatch('Jon', 'Skeet')
}

但是对于MySQL,如果使用的是InnoDB引擎,有一点要注意,InnoDB默认是的connection的autoCommit属性是打开的,在这种情况下批量插入是没有作用,因此需要把这个属性关闭。

SET autocommit=0 -- 执行sql前把自动提交关闭
commit -- 执行完sql后再提交变更数据

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值