出现情况:当一次插入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优化的方案要好一点。