我有一个大问题! 当我这样做时:
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中使用哪些命令? 这是我第一次有这个东西! 提前谢谢!
我在服务器上没有root权限!
我试过用这个:
mysql>set global max_allowed_packet=32*1024*1024;
但它给了我这个错误:ERROR 1227(42000):拒绝访问;您需要此操作的SUPER权限
修改
现在我已将max_allowed_packet变量修改为32MB。停止并重新启动服务器 但是eclipse给了我同样的错误!
我该怎么办?
答案 0 :(得分:13)
我只需要处理DriverManager.getConnection(URL,username,password)
引发的相同错误消息。我甚至得到了相同的#34;魔术数字" (4739923> 1048576);谷歌搜索那些"魔术数字"将显示人们的结果也会得到一些DriverManager.getConnection语句抛出的错误。就我而言,有关数据包大小的错误消息是完全错误的;我只是使用了一个错误的URL,整个事情都不得不用数据包大小。
也许这有助于解释我使用的URL出了什么问题 - 虽然这有点令人尴尬(这是一个非常愚蠢的错误。)这就是它。
我已成功连接到远程服务器/数据库,其中包含一些"数据库管理器"名为SQLYog的软件(有点像phpMyAdmin)。为了连接,我不得不给SQLYog 2套东西。首先,URL(或IP地址),用户名,密码和端口,以便我的计算机可以与服务器连接。第二,URL,端口,MySQL用户名,MySQL密码,以便服务器机器可以连接到数据库(位于那台机器上。)所以有2个URL和2个端口(还有2个用户名和2个密码)一个用于客户 - >服务器和服务器之一 - >数据库中。
现在,决定在DriverManager.getConnection中选择JAVA代码的那些URL,我选错了,愚蠢的我!显然,这必须是第二步(服务器 - >数据库),而不是第一步(客户端 - >服务器);在服务器上运行所有servlet之后,servlet甚至运行的事实表明步骤1已经完成,第2步仍有待完成。由于数据库与运行servlet的机器在同一台机器上,因此该URL只是" localhost&#34 ;;或者更确切地说," jdbc:mysql:// localhost:3306 / myDatabaseName"。而不是" jdbc:mysql://domainNameOfServer.com:somePortNumber / myDatabaseName",它引发了上述错误。
愚蠢的错误和非常愚蠢的错误消息。我想这很合适。
答案 1 :(得分: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..
答案 2 :(得分:2)
编辑my.cnf(ubunut)或my.ini(windows)文件并设置max_allowed_packet大小。
max_allowed_packet的= 512M
然后重启你的mysql服务器。它会工作
答案 3 :(得分:1)
但它给了我这个错误:ERROR 1227(42000):拒绝访问;你需要超级特权>对于此操作
尝试sudo set global max_allowed_packet = 32 * 1024 * 1024
答案 4 :(得分:1)
以下为我工作
编辑my.cnf文件(我的是/ etc / mysql)
然后修改max_allowed_packet值 我把它设置为 max_allowed_packet的= 200M
确保重新启动MySQL以使更改生效
答案 5 :(得分:0)
我遇到了这个问题并通过更改我的mysql-connector版本来解决它。可能是我在pom中的mysql-connector版本太高了。
堆叠打印:
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)
答案 6 :(得分:0)
如果无法停止数据库,则可以动态设置max allowed packet参数的值。为此:
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.
您仍需要按照上述方法中的说明更新/etc/my.cnf文件,以使更改保持不变。
答案 7 :(得分:0)
我有相同的误导性错误消息。
我通过将端口号更改为3306来修复它。以前我将端口号设置为2083,因为这是我在Web服务器上使用的端口。
答案 8 :(得分:-1)
我们不知道您的数据库有多大,但您的查询非常具体。
对于max_allowed_packet,请查看此帖: