com.mysql.jdbc.PacketTooBigException

时间:2012-12-07 08:25:56

标签: java mysql database jdbc database-connection

我有一个大问题! 当我这样做时:

 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_pa​​cket变量修改为32MB。停止并重新启动服务器 但是eclipse给了我同样的错误!

我该怎么办?

9 个答案:

答案 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_pa​​cket'变量在服务器上。

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_pa​​cket大小。

max_allowed_pa​​cket的= 512M

然后重启你的mysql服务器。它会工作

答案 3 :(得分:1)

  

但它给了我这个错误:ERROR 1227(42000):拒绝访问;你需要超级特权>对于此操作

尝试sudo set global max_allowed_pa​​cket = 32 * 1024 * 1024

答案 4 :(得分:1)

以下为我工作

编辑my.cnf文件(我的是/ etc / mysql)

然后修改max_allowed_pa​​cket值 我把它设置为 max_allowed_pa​​cket的= 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_pa​​cket,请查看此帖:

how to check and set max_allowed_packet mysql variable