com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: сбой связи

Я работаю над тем, чтобы моя firebase database говорила с моими 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.(ConnectionImpl.java:787) at com.mysql.jdbc.JDBC4Connection.(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.(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.(Socket.java:375) at java.net.Socket.(Socket.java:218) at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256) at com.mysql.jdbc.MysqlIO.(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?"); } } 

Итак, у вас есть

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: сбой связи
java.net.ConnectException: соединение отклонено

Я цитирую этот ответ, который также содержит пошаговое руководство по MySQL + JDBC:

Если вы получаете сообщение SQLException: Connection refused или время Connection timed out SQLException: Connection refused или Connection timed out с MySQL CommunicationsException: Communications link failure , значит это означает, что БД недоступно. Это может иметь одну или несколько из следующих причин:

  1. IP-адрес или имя хоста в URL-адресе JDBC неверны.
  2. Имя хоста в URL-адресе JDBC не распознается локальным DNS-сервером.
  3. Номер порта отсутствует или неверен в URL-адресе JDBC.
  4. Сервер БД отключен.
  5. Сервер БД не принимает соединения TCP / IP.
  6. У сервера БД закончились соединения.
  7. Что-то между Java и DB блокирует соединения, например брандмауэр или прокси.

Чтобы решить тот или иной, выполните следующие советы:

  1. Проверьте и проверьте их с помощью ping .
  2. Обновите DNS или используйте IP-адрес в URL-адрес JDBC.
  3. Проверьте его на основе my.cnf базы данных MySQL.
  4. Запустите БД.
  5. Убедитесь, что mysqld запущен без --skip-networking option .
  6. Перезагрузите БД и исправьте свой код, чтобы он finally закрыл соединения.
  7. Отключите брандмауэр и / или настройте брандмауэр / прокси, чтобы разрешить / переслать порт.

Смотрите также:

  • Как подключиться к базе данных JDBC / источнику данных в приложении на основе сервлета?
  • Можно ли использовать статический экземпляр java.sql.Connection в многопоточной системе?

Я поймаю это исключение, когда Java из кучи. Если я попытаюсь поместить в ОЗУ множество элементов данных – сначала я поймаю « Сбой связи » и следующий « OutOfMemoryError ».

Я зарегистрировал его, и я уменьшаю потребление памяти (удаляю 1/2 данных), и все в порядке.

Я мог бы лаять здесь неправильное дерево, но ваше исключение, похоже, указывает на то, что ваш сервер MySQL недоступен.

Исключение в streamе «main» com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Ошибка связи связи. Последний пакет, успешно отправленный на сервер, был 0 миллисекунд назад. Драйвер не получил никаких пакетов с сервера. в…

Что произойдет, если вы попробуете (с терминала)

 mysql -u username -p 

Вам будет предложено ввести пароль, связанный с именем пользователя. После того, как вы дадите правильный пароль, подключается ли клиент mysql?

Возможно, вам придется запустить MySQL из настроек, если нет. Вы также можете запустить его при запуске.

Это исключение com.mysql.jdbc.exceptions.jdbc4.CommunicationsException происходит, если соединение с базой данных простаивает долгое время.

Это недействительное соединение возвращает true на connection.isClosed(); но если мы попытаемся выполнить оператор, тогда он сгорит это исключение, поэтому я предлагаю пойти с пулом базы данных.

У меня была такая же проблема часами. Я использую сервер MAMP

Вместо использования localhost: [Apache Port] используйте ваш порт MySQL.

Ниже представлен порт MySQL по умолчанию для сервера MAMP.

 String url = "jdbc:mysql://localhost:8889/db_name"; Connection conn = DriverManager.getConnection(url, dbUsername, dbPassword); 

Это лучшее решение,

  Connection con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/DBname", "root", "root"); Connection con = DriverManager.getConnection( "jdbc:mysql://192.100.0.000:3306/DBname", "root", "root"); 

Замена Localhost на ваш IP-адрес

Загрузите MySQL-JDBC-Type-4-Treiber (ig ‘mysql-connector-java-5.1.11-bin.jar’ из ‘mysql-connector-java-5.1.11.zip’) в Mysql .

Вам нужно задействовать кувшин драйвера во время компиляции и выполнения в вашем пути к classам.

 Class.forName( "com.mysql.jdbc.Driver" ); // do this in init // edit the jdbc url Connection conn = DriverManager.getConnection( "jdbc:mysql://MyDbComputerNameOrIP:3306/myDatabaseName", username, password ); Statement st = conn.createStatement(); ResultSet rs = st.executeQuery( "select * from table" ); 

У меня такая же ошибка, потому что я пытался запустить свою программу без запуска сервера mysql.

После запуска сервера mysql все прошло правильно.

Обновите свой IP-адрес в файле /etc/mysql/my.cnf.

 bind-address =  

Перезапустите службы mysql deamon и mysql.

Более ранние ответы уместны. Но я хотел бы также указать на более общую проблему.

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

Такое же соединение стало успешным, когда я был в любой другой сети.

Просто испытал это.

Чтобы заставить его работать с помощью: (это можно разместить в статическом блочном intializer)

 static{ // would have to be surrounded by try catch Class.forName("com.mysql.jdbc.Driver"); // this will load the class Driver } 

Также, получив соединение через:

 conn = DriverManager.getConnection(DBURL,,); 

вместо указания параметров входа в систему

  Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/projects?user=user1&password=123"); 

С уважением.

Если вы используете WAMP или сервер XAMP для установки базы данных mysql. Затем вам нужно явно запустить mysql sever другим com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure он отображал com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure при подключении к базе данных

Моя же проблема решается следующими шагами:

  1. перейдите в my.cnf

    vi /etc/mysql/my.cnf

  2. изменить свой адрес связывания

    "#bind-address = 127.0.0.1"

  3. перезапустить mysql

    sudo /etc/init.d/mysql restart

Я решил эту проблему простым способом, который сработал для меня. У меня проблема с семей “com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Ошибка связи связи”. В моем файле db.properties у меня было это: url: jdbc: mysql: // localhost: 90 / myDB, удалили только URL-адрес порта, в результате чего появился url: jdbc: mysql: // localhost / myDB, и это сработало для меня ,

Это случилось со мной, когда я изменил порт mysql от 3306 до 3307 в файлах my.ini и php.ini, но после изменения портов (3307-> 3306) он снова работал отлично.

В моем случае, оказалось, что версия mysql-connector-java была высокой.

В моей демонстрации я как-то использую mysql-connector-java следующим образом:

  mysql mysql-connector-java 5.1.9  

Но в среде разработки я использую это:

  mysql mysql-connector-java 5.1.31  

И моя версия MySQL была 5.1.48 (да, она устарела, просто для имитации версии продукта). Поэтому я встретил ту же ошибку.

Поскольку причина найдена, решение также найдено. Сопоставьте версию!

Если вы изменили свой порт, вы получите такую ​​ошибку: «com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: сбой связи». Проверьте номер своего порта

У меня была та же проблема, и вот как она была исправлена:

  1. Мой .jsp вызывал атрибуты, которые я еще не определил в сервлет.
  2. У меня было два имени столбца, которые я передавал в объект через ResultSet (getString("columnName")) который не соответствовал именам столбцов в моей базе данных.

Я не совсем уверен, какой из них исправил проблему, но это сработало. Кроме того, убедитесь, что вы создаете новый Statement и ResultSet для каждого запроса таблицы.

Это может быть простая проблема с банками. Возможно, вы используете старый mysql-connector-java-XXX-bin.jar который не поддерживается вашей текущей версией mysql. Я использовал mysql-connector-java-5.1.18-bin.jar поскольку я использую mysql 5.5 и эта проблема решена для меня.

Попробуйте изменить localhost на 127.0.0.1 .

Локальный хост будет разрешен к ::1 . И MySQL не может быть подключен через IPv6 по умолчанию.

И вот вывод telnet localhost 3306 :

 $ telnet localhost 3306 Trying ::1... 

И от сервера MySQL нет ответа.

Конечно, убедитесь, что ваш сервер MySQL запущен.

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

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

2. Прокомментировать строку IP-адреса на mysqld.conf

затем подключитесь к новому имени пользователя и паролю. он должен работать.

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

Загрузка classа com.mysql.jdbc.Driver'. This is deprecated. The new driver class is com.mysql.jdbc.Driver'. This is deprecated. The new driver class is com.mysql.jdbc.Driver'. This is deprecated. The new driver class is com.mysql.cj.jdbc.Driver ‘. Драйвер автоматически регистрируется через SPI, и ручная загрузка classа драйвера обычно не нужна.

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

  mysql mysql-connector-java 5.1.38  

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

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

Если есть какие-либо читатели, которые столкнулись с этой проблемой для доступа к удаленному серверу: убедитесь, что порт открыт

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

Удачи!

Я столкнулся с той же проблемой в IntelliJ IDEA.

Чтобы решить проблему подключения, мне пришлось отключить ( + F2 с использованием ключевых слов по умолчанию на маке) и снова подключиться. Просто нажать «Обновить» было недостаточно.

  • Mysql: выбор всех данных между двумя датами
  • Как импортировать файл excel в базу данных MySQL
  • Как написать инструкцию IF ELSE в запросе MySQL
  • Можете ли вы использовать псевдоним в предложении WHERE в mysql?
  • MySQL - использование COUNT (*) в предложении WHERE
  • MySQL конвертирует вывод timediff в день, час, минуту, второй формат
  • Какие шаги я должен предпринять, чтобы полностью удалить MySQL?
  • MySql Count не может отображать 0 значений
  • Очистить кеш запросов MySQL без перезапуска сервера
  • node-mysql несколько операторов в одном запросе
  • MySQL - триггер для обновления той же таблицы после вставки
  • Давайте будем гением компьютера.