Я работаю над тем, чтобы заставить мою базу данных общаться с моими программами на 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?");
}
}
Ответы:
Итак, у вас есть
Я цитирую этот ответ, который также содержит пошаговое руководство по MySQL + JDBC:
Смотрите также:
источник
Я ловлю это исключение, когда Java из кучи. Если я попытаюсь поместить в оперативную память много элементов данных - сначала я поймаю Ошибка канала связи », а затем « OutOfMemoryError ».
Я зарегистрировал это, и я уменьшаю потребление памяти (удаляю 1/2 данных) и все в порядке.
источник
В моем случае мне нужно было заменить Localhost на фактический IP-адрес сервера базы данных.
Вместо того
мне было нужно
источник
Это
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
исключение возникает, если ваше соединение с базой данных не используется долгое время.Это незанятое соединение возвращает true,
connection.isClosed();
но если мы попытаемся выполнить оператор, то это исключение будет запущено, поэтому я предлагаю перейти к пулу базы данных.источник
У меня была такая же проблема в течение нескольких часов. Я использую MAMP Server
Вместо использования localhost: [Apache Port] используйте ваш порт MySQL.
Ниже приведен порт MySQL по умолчанию для сервера MAMP.
источник
Возможно, я ошибаюсь здесь, но ваше исключение указывает на то, что ваш сервер MySQL недоступен.
Что произойдет, если вы попробуете (из терминала)
Вам будет предложено ввести пароль, связанный с именем пользователя. После ввода правильного пароля подключается ли клиент mysql?
Возможно, вам придется запустить MySQL из настроек, если нет. Вы также можете настроить его запуск при запуске.
источник
localhost
я использую правильное имя пользователя / пароль, и он работает нормально.В моем случае оказалось, что версия
mysql-connector-java
была слишком старой.В моей демонстрации я как-то использую
mysql-connector-java
это:Но в среде разработки я использую это:
И моя версия MySQL была 5.1.48 (да, она старая, просто для имитации версии продукта). Поэтому я встретил ту же ошибку.
Поскольку причина найдена, решение найдено. Подходим к версии!
источник
Я получил ту же ошибку, потому что я пытался запустить мою программу без запуска сервера MySQL.
После запуска сервера mysql все прошло нормально.
источник
Более ранние ответы уместны. Но я также хотел бы указать на более общую проблему.
Я столкнулся с подобной проблемой, и причиной было сетевое ограничение моей компании.
То же соединение было успешным, когда я был в любой другой сети.
источник
Пожалуйста, обновите ваш IP-адрес в файле /etc/mysql/my.cnf
Перезапустите службы mysql deamon и mysql.
источник
Загрузите MySQL-JDBC-Type-4-Treiber (ig 'mysql-connector-java-5.1.11-bin.jar' из 'mysql-connector-java-5.1.11.zip') в Mysql .
Вы должны включить jar драйвера во время компиляции и выполнения в вашем classpath.
источник
Эта ошибка также может произойти, если Java пытается подключиться к MySQL через SSL, но что-то идет не так. (В моем случае я настраивал пулы соединений Payara Server 5.193.1 для MySQL.)
Некоторые люди предложили установку
useSSL=false
. Однако, начиная с версии Connector / J8.0.13
, этот параметр устарел. Вот выдержка из свойств конфигурации MySQL Connector / J 8.0 :Так что, в моем случае, настройка
sslMode=DISABLED
- это все, что мне нужно для решения проблемы. Это было на тестовой машине. Но для производства безопасным решением будет правильная настройка клиента Java и сервера MySQL для использования SSL.Обратите внимание, что при отключении SSL вам также может потребоваться установить
allowPublicKeyRetrieval=true
. (Опять же, не мудрое решение с точки зрения безопасности). Дополнительная информация представлена в MySQL ConnectionString Options :источник
Моя же проблема решается с помощью следующих шагов:
Перейти к
my.cnf
Изменить свой bind-адрес
Перезапустите MySQL
источник
Если вы используете
WAMP
илиXAMP
сервер для установки базы данных MySQL. Затем вы должны явно запустить mysql, чтобы он не отображалсяcom.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
при подключении к базе данных.источник
я решил эту проблему простым способом, который сработал для меня. у меня была проблема сем "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) он снова работал нормально.
источник
Если вы изменили свой порт, вы получите сообщение об ошибке такого типа "com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Ошибка канала связи" Пожалуйста, проверьте номер вашего порта
источник
Просто пережил это.
Должен заставить это работать: (это может быть помещено в статический блок intializer)
Также, получив соединение через:
вместо указания параметров входа
С уважением.
источник
Попробуйте изменить
localhost
на127.0.0.1
.Локальный хост будет разрешен
::1
. И MySQL не может быть подключен через IPv6 по умолчанию.И вот вывод
telnet localhost 3306
:И нет ответа от сервера MySQL.
Конечно, пожалуйста, убедитесь, что ваш сервер MySQL работает.
источник
если MySQL версии 8 или выше, пользователь обновил соединитель
источник
Для удаленного звонка на Mysql
Добавьте удаленного пользователя в Mysql для примера IP = remoteIP:
Разрешить удаленный доступ к Mysql (по умолчанию все внешние вызовы не разрешены):
Для последней версии драйвера JDBC, JDBC:
источник
У меня была такая же проблема, и вот как она была исправлена:
ResultSet (getString("columnName"))
который не совпадал с именами столбцов в моей базе данных.Я не совсем уверен, какой из них решил проблему, но это сработало. Также убедитесь, что вы создаете новый
Statement
иResultSet
для каждого запроса таблицы.источник
Это может быть простая проблема с банкой. возможно, вы используете старую
mysql-connector-java-XXX-bin.jar
версию, которая не поддерживается вашей текущей версией mysql. Я использовал,mysql-connector-java-5.1.18-bin.jar
как я использую,mysql 5.5
и эта проблема решена для меня.источник
Возможно, вы не запустили свой Mysql и Apache Server. После того, как я запустил сервер Apache и Mysql из панели управления XAMPP, соединение было успешно установлено.
Удачи!
источник
Для меня решено сделать 2 вещи: 1. создать нового пользователя, кроме root, с паролем, используя следующие коннады:
2. прокомментируйте строку IP-адреса в mysqld.conf
затем подключитесь с новым именем пользователя и паролем. он должен работать.
источник
Он пытался подключиться к более старой версии MySQL ('version', '5.1.73'); когда вы используете более новую версию драйвера, вы получаете сообщение об ошибке «com.mysql.cj.jdbc.Driver» или даже то, что вам не нужно указывать, какой из них вы используете:
Я изменил объявление, чтобы использовать версию mysql-connector-java 5.1.38, и в коде я сохранил com.mysql.jdbc.Driver .
Все началось, когда я увидел ответ Ankit Jain
источник
Мой брандмауэр блокировал пост 3307, который слушал мой MySQL. Поэтому я изменил порт с 3307 на 3306. Затем я могу успешно подключиться к базе данных.
источник
В моем MacBook я решил эту ошибку только при переустановке новой версии eclipse EE и удалении локальных серверов, таких как xamp mysql или mamp, но использую только один из них ...
источник
В моем случае я должен был установить ssh-туннель к удаленной базе данных, и все настройки были правильными, и тестирование соединения с PhpStorm также прошло успешно. А также схема была загружена, но не данные. Вместо этого я получил:
Ни одно из предложенных выше предложений не сработало. По какой-то причине я пытался решить проблему, просто перезапустив PhpStorm и вуаля, это сработало!
источник
Я получал несколько ошибок, таких как:
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).
источник