com.mysql.интерфейс jdbc.исключения.jdbc4.CommunicationsException: сбой канала связи
Я работаю над тем, чтобы моя база данных разговаривала с моими программами 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
содержимое файла test:
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?");
}
}
26 ответов:
Итак, у вас есть
com.mysql.интерфейс jdbc.исключения.jdbc4.CommunicationsException: сбой канала связи
java. net. ConnectException: соединение отказаноя цитирую из ответ который также содержит пошаговое руководство MySQL+JDBC:
если вы
SQLException: Connection refusedилиConnection timed outили MySQL specificCommunicationsException: Communications link failure, то это означает, что БД не доступен на всех. Это может быть один или несколько из следующие причины:
- IP-адрес или имя хоста в URL JDBC неверно.
- имя хоста в URL JDBC не распознается локальным DNS-сервером.
- номер порта отсутствует или неверен в URL-адресе JDBC.
- сервер БД не работает.
- сервер БД не принимает соединения TCP/IP.
- на сервере БД закончились соединения.
- что-то между Java и DB блокирует соединения, например a брандмауэр или прокси-сервер.
чтобы решить тот или другой, следуйте следующим советам:
- проверьте и протестируйте их с помощью
ping.- обновить DNS или использовать IP-адрес в URL JDBC вместо этого.
- проверьте его на основе
my.cnfБД MySQL.- запустите БД.
- Проверьте, запущен ли mysqld без
--skip-networking option.- перезагрузите БД и исправьте свой код соответственно, что он закрывает соединения в
finally.- отключить брандмауэр и/или настроить брандмауэр/прокси, чтобы разрешить / перенаправить порт.
Читайте также:
Я ловлю это исключение, когда Java из кучи. Если я попытаюсь поместить в ОЗУ много элементов данных-сначала я поймаю" сбой линии связи" и далее "OutOfMemoryError".
Я зарегистрировал его, и я уменьшаю потребление памяти (удалить данные 1/2) и все в порядке.
этой
com.mysql.jdbc.exceptions.jdbc4.CommunicationsExceptionисключение возникает, если подключение к базе данных используется в течение длительного времени.Это простое соединение возвращает true на
connection.isClosed();но если мы попытаемся выполнить оператор, то он будет запускать это исключение, поэтому я предлагаю пойти с пулом базы данных.
Я мог бы лаять на неправильное дерево здесь, но ваше исключение, кажется, указывает на то, что ваш сервер MySQL недоступен.
исключение в потоке "main" com.mysql.интерфейс jdbc.исключения.jdbc4.CommunicationsException: Сбой канала связи последний пакет, успешно отправленный на сервер, был 0 миллисекунды назад. Водитель не получил никаких пакетов от сервера. на...
что произойдет, если вы попробуете (от терминала)
mysql -u username -pвам будет предложено ввести пароль, связанный с именем пользователя. После того, как вы дадите правильный пароль, подключается ли клиент mysql?
возможно, Вам придется запустить MySQL из настроек, если не. Вы также можете установить его для запуска при запуске.
У меня была такая же проблема в течение нескольких часов. Я использую сервер 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 (i.g. 'mysql-connector-java-5.1.11-bin.jar 'from' mysql-connector-java-5.1.11.молния') в Mysql.
вам нужно внедрить драйвер jar во время компиляции и выполнения в вашем classpath.
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 все пошло правильно.
в моем случае, оказывается, что версия
mysql-connector-javaбыл высоким.в моем демо, я как-то использовать
mysql-connector-javaтакой:<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.9</version> </dependency>но в среде разработки, я использую этот:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.31</version> </dependency>и моя версия MySQL была 5.1.48 (да, она старая, просто для имитации версии продукта). Так что я встретил ту же ошибку.
так как причина найдена, решение тоже найдено. Соответствует версии!
пожалуйста, обновите свой IP-адрес в /etc/mysql / my.cnf file
bind-address = <IP_ADDRESS>перезапустите mysql deamon и mysql services.
более ранние ответы уместны . Но , я также хотел бы указать на более общий вопрос.
Я столкнулся с подобной проблемой, и причиной было ограничение сети моей компании.
такое же соединение было успешным, когда я был в любой другой сети.
только что испытал это.
должен заставить его работать: (это может быть помещено в статический блок 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,<username>,<password>);вместо указания параметров входа
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при подключении к базе данных
моя же задача решается следующим образом:
иди ко мне.cnf
vi /etc/mysql/my.cnfизменить его bind-адрес
"#bind-address = 127.0.0.1"перезапустить mysql
sudo /etc/init.d/mysql restart
Я решил эту проблему простой способ, который работал для меня. у меня была проблема seme "com.mysql.интерфейс jdbc.исключения.jdbc4.CommunicationsException: сбой канала связи". В моей БД.свойства файла надо было так : URL-адрес:в JDBC:MySQL базы://локальный:90/базы данных mydb, только удалил URL-адрес порта , в результате чего таким образом, URL-адрес вида JDBC:для MySQL://localhost в/mydb, а что работал для меня.
Это случилось со мной, когда я изменил порт mysql с 3306 на 3307 в моем.ini и php.ini файлы, но после изменения портов (3307->3306) обратно он снова работал нормально.
Если вы изменили свой порт, вы получите такую ошибку "com.mysql.интерфейс jdbc.исключения.jdbc4.CommunicationsException: сбой канала связи" Пожалуйста, проверьте ваш номер порта
у меня была такая же проблема, и вот как это было исправлено:
- мой .jsp вызывал атрибуты, которые я еще не определил в сервлет.
- у меня было два имени столбцов, которые я передавал в объект через
ResultSet (getString("columnName"))Это не соответствует именам столбцов в моей базе данных.Я не совсем уверен, какой из них исправил проблему, но это сработало. Кроме того, убедитесь, что вы создаете новый
StatementиResultSetдля каждого запроса таблицы.
это может быть простая проблема jar. может быть вы используете старую
mysql-connector-java-XXX-bin.jar, который не поддерживается текущей версией MySQL. я использовалmysql-connector-java-5.1.18-bin.jarКак я используюmysql 5.5и эта проблема решена для меня.
попробуйте изменить
localhostto127.0.0.1.localhost будет разрешено
::1. И MySQL не может быть подключен через IPv6 по умолчанию.и вот результат
telnet localhost 3306:$ telnet localhost 3306 Trying ::1...и нет никакого ответа от сервера MySQL.
конечно, убедитесь, что ваш сервер MySQL работает.
что решил для меня делает 2 вещи: 1. создайте нового пользователя, отличного от root, с некоторым паролем, используя следующие connads:
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost'; FLUSH PRIVILEGES;2. комментарий IP-адрес строки на mysqld.conf
затем подключитесь с новым именем пользователя и паролем. это должно сработать.
он пытался подключиться к более старой версии MySQL ('version', '5.1.73' ); при использовании более новой версии драйвера вы получаете сообщение об ошибке, которое говорит вам использовать " com.mysql.Си Джей.интерфейс jdbc.Водитель или даже то, что вам не нужно специально указывать, какой из них вы используете:
загрузка класс
com.mysql.jdbc.Driver'. This is deprecated. The new driver class iscom.mysql.Си Джей.интерфейс jdbc.Водитель'. Водитель автоматически регистрируется через SPI и ручную загрузку драйвера класс вообще не нужен.I изменил объявление, чтобы использовать 5.1.38 версию mysql-connector-java и, в коде, я сохранил com.mysql.интерфейс jdbc.Водитель.
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency>все началось, когда я увидел Анкит Джейн -ответ
мой брандмауэр блокировал сообщение 3307, которое слушал мой MySQL. Поэтому я изменил порт на 3307 3306.Тогда я могу успешно подключиться к базе данных.
Если есть какие-то читатели, которые сталкивались с этой проблемой для доступа к удаленному серверу: убедитесь, что порт открыт
возможно, вы не запустили свой сервер Mysql и Apache. После того, как я запустил Apache server и Mysql из Панели управления XAMPP, соединение было успешно установлено.
удачи!
Я столкнулся с той же проблемой на IntelliJ IDEA.
чтобы решить проблему подключения, мне пришлось отключить (⌘+F2 использование Привязок клавиш по умолчанию на mac) и снова подключиться. Просто нажать "Обновить" было недостаточно.
Comments