18

私はこの例外についてよく読みましたが、解決できません。

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 を試しましたが、結果は同じです。

4

7 に答える 7

7

ファイル my.cnf を検索し、その行にコメントを付けます

skip-networking

#skip-networking

mysql を再起動します

于 2014-09-25T18:43:55.913 に答える
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 のインストール中に変更することができます。

パスワードとユーザーを指定するより良い方法は、次のようにURLからそれらを分離することだと思います:

connection = DriverManager.getConnection(url, login, password);
于 2013-01-28T10:24:53.900 に答える
5

この問題は、ほとんどの場合、実行されていない MySQL サービスが原因であるため、実行されていることを確認してください。そうでない場合は、この CMD を管理者権限で実行して開始します。

sc start [Your MySQL Service name]
于 2013-12-09T18:49:27.453 に答える
5

この問題は、新しい mysql コネクタで修正されています。http://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.38 を使用してください。

以前はコネクタ jar を更新した後にこのエラーが発生していましたが、問題は解決しました。

于 2016-05-25T11:04:36.437 に答える
4

次の提案を試してください。

  1. マシンには静的 IP がある場合があります。この IP をhostsとしてファイルにマップしますlocalhost
  2. コマンドを使用して、コンピューターまたはネットワーク内からログインしてみてくださいmysql。ログインが成功した場合、MySQL が正常に動作していることを意味します。
于 2013-11-21T09:49:26.180 に答える
2

Java コードが IPv4 ではなく IPv6 を使用しているようです。127.0.0.1代わりに使ってみてくださいlocalhost。例:接続文字列は

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

PS: URL 接続文字列を更新してください。

于 2013-01-28T10:40:21.403 に答える
2

2つのことがあります

  1. ファイアウォールがある場合は無効にするか、例外を追加するか、正しいドライバー ファイルがあるかどうかを確認します。アンチウイルスがあれば無効にする

  2. また、ドライバーの種類が であることを確認してくださいmysql.jdbc.driver

于 2014-12-08T07:22:15.550 に答える