Java arrayDeque分割List實現大批量匯入功能
阿新 • • 發佈:2019-02-19
今天做的匯入功能出現了個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);
}