web-dev-qa-db-ja.com

Javaエラー。サーバーに正常に送信された最後のパケットは0ミリ秒前でした

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

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

15
user1113159

でポートを指定してみてください

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);
6
Aleksei Bulgak

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

sc start [Your MySQL Service name]
5
Marwen Trabelsi

ファイルmy.cnfを検索し、行をコメント化します

skip-networking

#skip-networking

Mysqlを再起動します

5
Alan Cruz

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

コネクタjarの更新後にこのエラーが表示されていましたが、問題は解決しました。

3
lastextinct

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

  1. マシンに静的IPがある場合があります。このIPをhostsファイルにlocalhostとしてマップします。
  2. mysqlコマンドを使用して、コンピューターまたはネットワーク内からログインしてみてください。ログインに成功すると、MySQLが正常に実行されることを意味します。
3
M S Parmar

2つのことがあります

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

  2. また、ドライバーの種類がmysql.jdbc.driver

2
danielad

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

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

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

2
Evgeniy Fitsner