项目遇到一次插入数据过大然后报错的问题
有两种解决方式,
一种是调大max_allow_package这个数值,然后重启数据库。
(搜索关键词max_allow_package,能查到)
另一种是可以分批次插入
/**
* @param jsonItems:传入的巨大的集合,这个集合一次可能插入不进去
* @param subLength: 步长,一次插入多少条数据
* @return
*/
public ArrayList<List<JsonItem>> subJsonItems(List<JsonItem> jsonItems, int subLength){
ArrayList<List<JsonItem>> result= new ArrayList<>();
for (int i=0;i<jsonItems.size();i=i+subLength){
int start = i;
int end;
if((start+subLength) < jsonItems.size()){
end = start + subLength;
}else {
end = jsonItems.size();
}
List<JsonItem> jsonItemSubSon = jsonItems.subList(start, end);
result.add(jsonItemSubSon);
}
return result;
}
使用时:
public int saveAllJsonExaminations(List<JsonItem> allJsonItems) {
ArrayList<List<JsonItem>> subLists = subJsonItems(allJsonItems, 1000);
int sum=0;
for (int i=0;i<subLists.size();i++){
List<JsonItem> jsonItems = subLists.get(i);
int oneSaveCount = jsonDao.saveAllJsonExaminations(jsonItems);
log.info("分批插入"+oneSaveCount+"条数据");
sum=sum+oneSaveCount;
}
return sum;
}