Java arrayDeque分割List实现大批量导入功能

今天做的导入功能出现了个bug,超过了2100条的数据做批量导入的时候,数据库会报错(小弟用的是sql server2012版本)。
tomcat报错提示
这一块的问题在于sql server 2012不能支持超过2100个参数的语句,而我这里的做法是使用Mybatis的语句,一次把多个进行update。所以才会导致了这个错误。
于是,考虑到的解决方法就是切割这一个List,刚刚是打算分割成多个List来进行操作的,后续发现好麻烦!于是,在同事的提醒下使用了Java的双向队列ArrayDeque。

这个大哥提供了一篇介绍的博文,大家可以去了解一下!

http://yikun.github.io/2015/04/11/Java-ArrayDeque%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86%E5%8F%8A%E5%AE%9E%E7%8E%B0/

Java里调用这个ArrayDeque的方式很简单,本身这个queue就自带构造函数把list转成queue.
`Collection<String> orderScrenAdvertisementLongExcels;
Queue<String> queue = new ArrayDeque(orderScrenAdvertisementLongExcels);

然后对应的再进行分割便可,代码如下:

int updatedRows = 0;
            int maxSize = 688;
            if (orderScrenAdvertisementLongExcels.size()>maxSize){
                Queue<String> queue = new ArrayDeque(orderScrenAdvertisementLongExcels);
                while (queue.size()>maxSize){
                    Queue<String> queueTmp = new ArrayDeque(maxSize);
                    for (int i= 0;i < maxSize;i++){
                        String tmp = queue.poll();//移除并返回队列头部的元素    如果队列为空,则返回null
                        queueTmp.offer(tmp);
                    }
                    updatedRows+=advertisementExcelMapper.updateProcessManagerOrderScreen(queueTmp, orderId, seq);
                }
                updatedRows+= advertisementExcelMapper.updateProcessManagerOrderScreen(queue, orderId, seq);
            }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值