Mysql com.mysql.jdbc.PacketTooBigException 的解决方案

出现情况:当一次插入30000条数据时,SQL拼装过长。

com.mysql.jdbc.PacketTooBigException: Packet for query is too large (3933378 > 1048576). You can change this value on the server by setting the max_allowed_packet' variable.
	at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3915)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2598)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2778)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2825)
	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2156)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2459)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2376)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2360)


方案一:改Mysql配置

正如报错提示那样,改my.ini配置,默认是1M,该大点咯。



方案二:优化SQL语句。

写了那么多的SQL,能出现那么长的SQL,一般都是Insert。

将SQL分段就好了。

我这里是Insert 1000个数据就生成一个SQL。



不管是JAVA,还是PHP,都有可能遇到这种SQL过长的情况。

个人认为,还是SQL优化的方案要好一点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值