msyql一次插入大量数据报max_allow_package...

项目遇到一次插入数据过大然后报错的问题

 

 

有两种解决方式,

一种是调大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;
    }

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值