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);
            }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章