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;
}
数据全部执行完才提交到数据库,怎么能每隔多少打就提交到数据库? 展开
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;
}
数据全部执行完才提交到数据库,怎么能每隔多少打就提交到数据库? 展开
展开全部
封装一个执行批处理的方法,作为独立事务,每次执行后立即提交,方法入参是List,List在传进去前赋好值,如你想要的500个封装为一个LIst,这样就可以在外围控制什么时候提交。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这个不能实现批量提交啊。 你就500条的时候提交了一次,剩下的一起提交了。。
应该把if (batch == 500) { 写成if (batch %500 == 0) {
应该把if (batch == 500) { 写成if (batch %500 == 0) {
追问
executor.executeBatch();
batch = 0;
重置成0了,和取余效果一样的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我看你那个计数器是500,批量操作的有没有超过500?那个应该是超过500没有到500的在最后提交下。比如800条,前面500提交后面,剩余300提交--因为计数判断。如果没有到500的话那个计数判断进不去,就直接在最后那里执行了。
追问
写入的都是上万条数据,在executor.executeBatch();处加了断点的,中间执行executor.executeBatch()数据库一直没写入数据,也是直到最后执行完后才能在数据库查到数据,
调试是执行了的,应该是没commit,怎样能不全部执行完就写到数据库
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询