永发信息网

ibatis 执行批量插入执行第一个executor.executeBatch(),后未写入数据库

答案:4  悬赏:50  手机版
解决时间 2021-03-09 22:43
  • 提问者网友:嗝是迷路的屁
  • 2021-03-09 13:07
public Object doInSqlMapClient(SqlMapExecutor executor)
throws SQLException {
executor.startBatch();
int batch = 0;
//int count = 0;
for(Map en : list) {
executor.insert("CDMQ111_YHJBXX.insTaskPlan", en);
//count++;
batch++;
if (batch == 500) {
executor.executeBatch();
batch = 0;
}
}
executor.executeBatch();
//count = 1;
return 1;
}
数据全部执行完才提交到数据库,怎么能每隔多少打就提交到数据库?
最佳答案
  • 五星知识达人网友:第四晚心情
  • 2021-03-09 14:17
封装一个执行批处理的方法,作为独立事务,每次执行后立即提交,方法入参是List,List在传进去前赋好值,如你想要的500个封装为一个LIst,这样就可以在外围控制什么时候提交。
全部回答
  • 1楼网友:鱼芗
  • 2021-03-09 16:30
你这个不能实现批量提交啊。 你就500条的时候提交了一次,剩下的一起提交了。。 应该把if (batch == 500) { 写成if (batch %500 == 0) {
  • 2楼网友:想偏头吻你
  • 2021-03-09 15:40
你好! 按你的要求,就不要把10000多行作为一个事务,可以500行作为一个事务,不过做的时候认为控制将10000行作为一个事务。中间某个500行出错的时候,可能需要把前面所有已执行完的,都删掉。如果不删掉,要想好怎么控制不让已执行的再重复一遍 仅代表个人观点,不喜勿喷,谢谢。
  • 3楼网友:人间朝暮
  • 2021-03-09 14:29
我看你那个计数器是500,批量操作的有没有超过500?那个应该是超过500没有到500的在最后提交下。比如800条,前面500提交后面,剩余300提交--因为计数判断。如果没有到500的话那个计数判断进不去,就直接在最后那里执行了。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯