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

publicObjectdoInSqlMapClient(SqlMapExecutorexecutor)throwsSQLException{executor.start... 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;
}
数据全部执行完才提交到数据库,怎么能每隔多少打就提交到数据库?
展开
 我来答
abcd880129
2013-09-12 · TA获得超过216个赞
知道小有建树答主
回答量:479
采纳率:0%
帮助的人:219万
展开全部
按你的要求,就不要把10000多行作为一个事务,可以500行作为一个事务,不过做的时候认为控制将10000行作为一个事务。中间某个500行出错的时候,可能需要把前面所有已执行完的,都删掉。如果不删掉,要想好怎么控制不让已执行的再重复一遍
疯希
推荐于2017-09-21 · TA获得超过540个赞
知道小有建树答主
回答量:216
采纳率:100%
帮助的人:167万
展开全部
封装一个执行批处理的方法,作为独立事务,每次执行后立即提交,方法入参是List,List在传进去前赋好值,如你想要的500个封装为一个LIst,这样就可以在外围控制什么时候提交。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
shihong4340
2013-09-12
知道答主
回答量:4
采纳率:0%
帮助的人:5702
展开全部
你这个不能实现批量提交啊。 你就500条的时候提交了一次,剩下的一起提交了。。
应该把if (batch == 500) { 写成if (batch %500 == 0) {
追问
executor.executeBatch();
batch = 0;
重置成0了,和取余效果一样的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
YO_123
2013-09-12 · TA获得超过2700个赞
知道小有建树答主
回答量:981
采纳率:0%
帮助的人:921万
展开全部
我看你那个计数器是500,批量操作的有没有超过500?那个应该是超过500没有到500的在最后提交下。比如800条,前面500提交后面,剩余300提交--因为计数判断。如果没有到500的话那个计数判断进不去,就直接在最后那里执行了。
追问
写入的都是上万条数据,在executor.executeBatch();处加了断点的,中间执行executor.executeBatch()数据库一直没写入数据,也是直到最后执行完后才能在数据库查到数据,
调试是执行了的,应该是没commit,怎样能不全部执行完就写到数据库
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式