PacketTooBigException

PacketTooBigException,第1张

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不方便维护。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5712261.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存