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