com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: сбой линии связи - PullRequest
182 голосов
/ 06 июня 2010

Я работаю над тем, чтобы моя база данных могла общаться с моими программами на Java.

Может кто-нибудь дать мне быстрый и грязный пример программы, использующей JDBC?

Я получаю довольно громадную ошибку:

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:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2260)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:787)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:357)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
    at java.sql.DriverManager.getConnection(DriverManager.java:582)
    at java.sql.DriverManager.getConnection(DriverManager.java:207)
    at SqlTest.main(SqlTest.java:22)
Caused by: 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:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2181)
    ... 12 more
Caused by: java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432)
    at java.net.Socket.connect(Socket.java:529)
    at java.net.Socket.connect(Socket.java:478)
    at java.net.Socket.<init>(Socket.java:375)
    at java.net.Socket.<init>(Socket.java:218)
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:293)
    ... 13 more

Содержимое тестового файла:

import com.mysql.jdbc.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class SqlTest {

    public static void main(String [] args) throws Exception {
        // Class.forName( "com.mysql.jdbc.Driver" ); // do this in init
        // // edit the jdbc url 
        Connection conn = DriverManager.getConnection( 
            "jdbc:mysql://localhost:3306/projects?user=user1&password=123");
        // Statement st = conn.createStatement();
        // ResultSet rs = st.executeQuery( "select * from table" );

        System.out.println("Connected?");
    }
}

Ответы [ 33 ]

0 голосов
/ 10 февраля 2019

Я получал несколько ошибок, таких как:

  • CommunicationsException: Communications link failure
  • java.lang.NullPointerException: Attempt to invoke interface method 'java.sql.Statement java.sql.Connection.createStatement()' on a null object reference at.

Мне пришлось добавить:

  • В AndroidManifest.xml включите <uses-permission android:name="android.permission.INTERNET"/> сразу после открывающего тега манифеста.

  • Добавьте драйвер JDBC в зависимости Gradle (или Maven).

0 голосов
/ 23 января 2019

Также ваш сервер может быть просто закрыт.На Mac перейдите на панель настроек MySQL через прожектор.Там установите флажок, чтобы запускать сервер при запуске компьютера и запускать сервер.

0 голосов
/ 23 декабря 2018

В моем случае мне пришлось установить ssh-туннель к удаленной базе данных, и все настройки были правильными, и тестирование соединения с PhpStorm также прошло успешно. А также схема была загружена, но не данные. Вместо этого я получил:

[08S01] 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.

Ни одно из предложенных выше предложений не сработало. По какой-то причине я пытался решить проблему, просто перезапустив PhpStorm и вуаля, это сработало!

0 голосов
/ 17 ноября 2018

Открыть файл /etc/mysql/my.cnf: изменить параметр ниже

bind-address = 127.0.0.1 to bind-address = 192.168.0.3 #this is your local system IP Address * * 1004

Выполните команду ниже в mysql для определенного IP-адреса ->

grant all privileges on dbname.* to dbusername@'192.168.0.3' IDENTIFIED BY 'dbpassword';                      

Если вы хотите предоставить доступ ко всем IP-адресам, выполните следующую команду:

grant all privileges on dbname.* to dbusername@'%' IDENTIFIED BY 'dbpassword'; 
0 голосов
/ 03 ноября 2018

Я столкнулся с той же проблемой, когда запускал свое приложение,

Caused by: 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.

Проблема заключалась в том, что в файле mysql / etc / mysql / mysql.conf.d / mysqld.cnf конфигурация была такой:

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
log-error       = /var/log/mysql/error.log
# By default we only accept connections from localhost
bind-address    = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

Итак, как мы видим, что адрес привязки указывает на 127.0.0.1, поэтому для запуска вашего приложения простое решение заключается в том, что мы можем использовать jdbc: mysql: //127.0.0.1: 3306 / pizzeria вместо jdbc: mysql: // localhost: 3306 / pizzeria , который подключит mysql к приложению или другому решению, заключается в том, что вы можете проверить и изменить конфигурации mysql на default. Оба решения могут работать , Надеюсь, это сработает и для вас, ребята.

0 голосов
/ 24 октября 2018

В моем MacBook я исправил эту ошибку только при переустановке новой версии eclipse EE и удалении локальных серверов, таких как xamp mysql или mamp, но использую только один из них ...

0 голосов
/ 07 июня 2018

Мой брандмауэр блокировал пост 3307, который слушал мой MySQL. Поэтому я изменил порт с 3307 на 3306. Затем я могу успешно подключиться к базе данных.

0 голосов
/ 13 февраля 2018

При попытке подключиться к более старой версии MySQL ('version', '5.1.73' ); когда вы используете более новую версию драйвера, вы получаете сообщение об ошибке "com.mysql.cj.jdbc.Driver или даже если вам не нужно указывать, какой драйвер вы используете:

Класс загрузки com.mysql.jdbc.Driver'. This is deprecated. The new driver class is com.mysql.cj.jdbc.Driver '. Водитель автоматически регистрируется через SPI и ручную загрузку драйвера класс вообще не нужен.

Я изменил объявление, чтобы использовать версию mysql-connector-java 5.1.38, и в коде я сохранил com.mysql.jdbc.Driver .

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.38</version>
</dependency>

Все началось, когда я увидел анкитский джайнский ответ

0 голосов
/ 16 августа 2017

Для меня решено сделать 2 вещи: 1. Создайте нового пользователя, кроме root, с паролем, используя следующие коннады:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost';
FLUSH PRIVILEGES;

2. комментарий строка IP-адреса на mysqld.conf

затем соединитесь с новым именем пользователя и паролем. это должно работать.

0 голосов
/ 23 июля 2017

Возможно, вы не запустили свой Mysql и Apache Server. После того, как я запустил сервер Apache и Mysql из панели управления XAMPP, соединение было успешно установлено.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...