栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

PacketTooBigException

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PacketTooBigException

批量插入Mysql报错:com.mysql.jdbc.PacketTooBigException: Packet for query is too large (2787754 > 1048576). You can change this value on the server by setting the max_allowed_packet’ variable.

首先这个报错原因是要插入的数据有2787754B约等于2.7MB,而mysql表中最大允许包为1048576B,即1MB,所以导致插入失败,MySQL会根据配置文件限制server接受的数据包大小,有时候大的插入和更新会被max_allowed_packet 参数限制掉,导致失败。

我是用的是批量导入,一开始我以为是因为我的数据量太大,导致的,但是经过我一天的研究,发现是我代码写的有问题,我的需求是这样的:使用阿里巴巴的EasyExcel工具解析Excel导入数据库,存储方法用的是mybatis的批量插入。

后来试着修改,将mybatis换成jdbc来执行,还是不行,后来翻看代码,发现我每次储存2000条数据,放到list里,再执行sql,这时的情况就是第一次批量插入的时候没任何问题,第二次插入由于没有清空list,第二次的数据就是2000+2000,往后的以此类推,不管数据库给多大的数据接收量,总会出现PacketTooBigException,数据也是有问题的。

另外,jdbc和mybatis的效率问题,mybatis是基于JDBC的。Java与数据库操作仅能通过JDBC完成。 MyBaties也要通过JDBC完成数据查询、更新这些动作。MyBaties 仅仅是在JDBC基础上做了,OO化、封装事务管理接口这些东西,JDBC是地基,MyBaties /Hibernate 是两栋外形各自有特点的楼房,楼房之间可以比较!地基就这一种。mybatis是方便我们执行数据库操作的,方便我们使用动态SQL,重要的是JDBC不方便维护。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/715621.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号