我有一个很大的问题! 当我这样做:
String query = "SELECT * FROM utente WHERE confermato=1 and Username='" + username
+ "' AND Password='" + password + "'";
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con = DriverManager.getConnection("ind_server/nome_db","user","password");
Eclipse中给了我这个错误:
Packet for query is too large (4739923 > 1048576). You can change this value on the server by setting the max_allowed_packet' variable.
因此,首先:此查询是真的这么大? 该命令我必须在ssh来wrtite:后-.-? 这是我第一次因为这个东西! 提前致谢!
我没有在服务器上的root权限!
我尝试使用这样的:
mysql>set global max_allowed_packet=32*1024*1024;
但它给我这个错误:ERROR 1227(42000):访问被拒绝; 你需要SUPER权限进行此操作
编辑
现在,我已经修改了max_allowed_packet的变量32MB。 停止并重新启动服务器,但日食给了我同样的错误!
我能做什么?
Answer 1:
我不得不应付同样的错误信息,通过抛出DriverManager.getConnection(URL,username,password)
。 我甚至得到了相同的“幻数”(4739923> 1048576); google搜索那些“幻数”将展示从人们也越来越被一些的DriverManager.getConnection语句引发错误的结果。 在我的情况,有关数据包大小错误消息完全是误导成份; 我只是用一个错误的URL,而整个事情不得不做与数据包大小NOTHING。
也许这将有助于解释什么是错的我使用的URL - 虽然这是一种尴尬(这是一种非常愚蠢的错误。)在这里不言而喻。
我成功地连接到远程服务器/数据库名为SQLyog的(有点像phpMyAdmin的)一些“数据库管理器”软件。 为了连接,我不得不放弃SQLyog的2套的事情。 首先,URL(或IP地址),用户名,密码和端口,让自己的计算机可以与服务器连接。 其次,URL,端口,MySQL用户名,MySQL的密码,以便服务器机器可以连接到数据库(位于该非常机器上)。所以有2个网址,并2个端口(以及2名和2个密码)之一客户端 - >服务器和一台服务器 - >数据库。
现在,决定哪个URL那些挑中的DriverManager.getConnection的Java代码,我选错了一个,愚蠢的我! 显然,必须是一个用于第二步骤(服务器 - >数据库),而不是在第一步骤(客户端 - >服务器); 所有的servlet后在服务器上运行,这样一个事实,即该servlet甚至运行显示,第1步已经照顾,和步骤2有待完成。 由于数据库是同一台机器上机器的servlet中运行,该URL只是“localhost”的; 或者,更确切地说, “JDBC:MySQL的://本地主机:3306 / myDatabaseName”。 而不是 “的jdbc:mysql的://domainNameOfServer.com:somePortNumber / myDatabaseName”,它抛出上述错误。
愚蠢的错误和非常愚蠢的错误消息。 我想适合。
Answer 2:
分组查询过大(2285643> 1048576)。 您可以通过设置max_allowed_packet的”变量更改服务器上的此值。
SOLUTIONS:-
You can see it's current value in mysql like this:
SHOW VARIABLES LIKE 'max_allowed_packet'
You can try to change it like this, but it's unlikely this will work on shared hosting:
SET GLOBAL max_allowed_packet=16777216;
and restart mysql service..
Answer 3:
编辑您的my.cnf(ubunut)或my.ini的文件(Windows),并设置max_allowed_packet的大小。
max_allowed_packet的= 512M
然后,重新启动你的mysql server.It将工作
Answer 4:
但它给我这个错误:ERROR 1227(42000):访问被拒绝; 你需要SUPER权限>此操作
尝试须藤设置全局max_allowed_packet个= 32 * 1024 * 1024
Answer 5:
下面为我工作
编辑my.cnf文件(我的是在/ etc / MySQL的)
然后更改max_allowed_packet值我将它设置为max_allowed_packet个= 200M
请确保您重新启动MySQL的更改生效
Answer 6:
我遇到这个问题,并通过改变我的MySQL连接器版本。可能是我的聚甲醛的MySQL连接器版本过高解决这个问题。
堆叠印刷:
Thu Nov 03 18:24:03 CST 2016 WARN: Invalid value 'null' for server variable named 'auto_increment_increment', falling back to sane default of '1'.
Exception in thread "main" com.mysql.jdbc.PacketTooBigException: Packet for query is too large (44 > -1). You can change this value on the server by setting the max_allowed_packet' variable.
at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:577)
at com.mysql.jdbc.MysqlIO.getResultSet(MysqlIO.java:417)
at com.mysql.jdbc.MysqlIO.readResultsForQueryOrUpdate(MysqlIO.java:3105)
at com.mysql.jdbc.MysqlIO.readAllResults(MysqlIO.java:2336)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2729)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2549)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1962)
at com.sparkproject.jdbc.JDBCHelper.main(JDBCHelper.java:382)
Answer 7:
If you are unable to stop your database, you can alternatively set the value of the max allowed packet parameter dynamically. To do so:
1. Log in as a root user.
2. You'll need to set the value as an integer, rather than '256M'. 256M is equivalent to 256*1024*1024, or 268435456.
3. mysql> SET GLOBAL max_allowed_packet=268435456;
4. To check that this has been applied:
a. Relogin to your mysql client.
b. mysql> SELECT @@max_allowed_packet;
Restart your Confluence instance.
You will still need to update your /etc/my.cnf file as described in the method above to make the change persistent.
Answer 8:
还有我们不知道你的数据库有多大,但你的查询是非常具体的。
作为max_allowed_packet个,检查这篇文章:
如何检查和设置的mysql的max_allowed_packet变量
文章来源: com.mysql.jdbc.PacketTooBigException