一个小问题 关于 com.mysql.jdbc.PacketTooBigException: Packet for query is too large

这个错本身就是应为传输的数据大于mysql的max_allowed_packet参数默认值造成的;

之前遇到这个问题,一直是改max_allowed_packet的值 ,做项目遇到这个错误改了好几次,从1M改到10M,10M改到50M,50M又不够了;没有考虑到增量数据的问题,有的数据是一直增长的。

所以解决这个问题的根本,是需要在程序中,做分批次插入;

//data 为需要入库的数据,持续增长中目前3万多行,需要切分为几个list
LinkedList<LinkedHashMap<String,Object>> data=new LinkedList<LinkedHashMap<String,Object>>();
.....
//收集数据 data.add(xxxx)
......
//入库 HashMap<String,Object> map= new HashMap<>(); map.put("table_name", "tbl_consistency_check"); consCheckDao.truncateTable(map); //分批次入库(一批3000行) Integer size=data.size(); Integer batches_size=3000; Integer num=size/batches_size; for(int i=0;i<num;i++) { List<LinkedHashMap<String, Object>> tmp= data.subList(0, batches_size); map.put("data", tmp); consCheckDao.insertConCheckTable(map); data.subList(0, batches_size).clear(); } List<LinkedHashMap<String, Object>> tmp_2= data.subList(0, data.size()); map.put("data", tmp_2); consCheckDao.insertConCheckTable(map);

 

posted @ 2018-08-09 10:08  Nucky_yang  阅读(361)  评论(0编辑  收藏  举报