带有JAVA错误的MySql。成功发送到服务器的最后一个数据包是0毫秒前

时间:2013-01-28 10:16:13

标签: java mysql mysql-connector

我已经阅读了很多这个例外,但我无法解决这个问题。

Mysql服务器正在运行。

我可以从NetBeans连接到它,但我无法从java代码连接到它。

Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2332)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2369)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2153)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:381)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
    at java.sql.DriverManager.getConnection(DriverManager.java:579)
    at java.sql.DriverManager.getConnection(DriverManager.java:243)
    at javaapplication3.JavaApplication3.main(JavaApplication3.java:32)
Caused by: java.net.SocketException: Permission denied: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
    at java.net.Socket.connect(Socket.java:579)
    at java.net.Socket.connect(Socket.java:528)
    at java.net.Socket.<init>(Socket.java:425)
    at java.net.Socket.<init>(Socket.java:241)
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:257)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:294)
    ... 15 more
Java Result: 1

我通过任何方式从java代码连接到Mysql来捕获此异常,但是从MysqlWorkBench和NetBeans可以。 我没有防火墙。我试过127.0.0.1,结果是一样的。

7 个答案:

答案 0 :(得分:6)

尝试在

中指定端口
conn = DriverManager.getConnection("jdbc:mysql://localhost/mysql?"
                                        + "user=root&password=onelife");

我认为你应该有这样的事情:

conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql?"
                                            + "user=root&password=onelife");

我的示例中的端口号(3306)它是默认端口,您可以在安装mysql时更改它

我认为更好的方法是指定密码和用户分隔网址,如下所示:

connection = DriverManager.getConnection(url, login, password);

答案 1 :(得分:5)

问题主要是由于MySQL服务未启动,请确保它正在运行,如果不是,请运行具有管理员权限的CMD以启动它:

sc start [Your MySQL Service name]

答案 2 :(得分:5)

搜索文件my.cnf并注释该行

skip-networking

#skip-networking

重启mysql

答案 3 :(得分:3)

尝试以下建议:

1)您的机器可能有静态IP;将此hosts文件中的IP映射到localhost 2)尝试通过mysql命令从计算机或网络登录;如果登录成功,那意味着mysql运行正常。

答案 4 :(得分:3)

这个问题已经修复了新的mysql连接器, 请使用http://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.38

我在更新连接器jar后遇到此错误,问题已解决。

答案 5 :(得分:2)

看来,使用IPv6代替IPv4的java代码,请尝试使用127.0.0.1而不是localhost。例如:您的连接字符串应如下所示

jdbc:mysql://127.0.0.1:3306/expeditor?zeroDateTimeBehavior=convertToNull&user=root&password=onelife

P.S:更新URL连接字符串

答案 6 :(得分:2)

有两件事

  1. 禁用防火墙(如果有)或添加异常或检查是否有正确的驱动程序文件。禁用任何防病毒(如果有)

  2. 并确保您的驱动程序类型为mysql.jdbc.driver