今天做的導入功能出現了個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);
}