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.сеть.ConnectException: соединение отказано
я цитирую из ответ который также содержит пошаговое руководство MySQL+JDBC:
если вы
SQLException: Connection refused
илиConnection timed out
или специфический MySQLCommunicationsException: Communications link failure
, тогда это означает, что БД вообще недоступна. Это может быть один или несколько из следующие причины:
- IP-адрес или имя хоста в URL JDBC неверно.
- имя хоста в URL JDBC не распознается локальным DNS-сервером.
- номер порта отсутствует или неправильный в URL JDBC.
- БД сервера.
- сервер БД не принимает TCP/IP-соединения.
- на сервере БД закончились подключения.
- что-то между Java и DB блокирует соединения, например брандмауэр или прокси.
чтобы решить тот или другой, следуйте следующим советам:
- проверьте и протестируйте их с помощью
ping
.- вместо этого обновите DNS или используйте IP-адрес в URL JDBC.
- проверьте его на основе
my.cnf
MySQL DB.- запустите DB.
- Проверьте, запущен ли mysqld без
--skip-networking option
.- перезагрузите БД и исправьте код соответственно, он закрывает соединения в
finally
.- отключить брандмауэр и/или настроить брандмауэр/прокси для разрешения / пересылки порта.
Читайте также:
Я ловлю это исключение, когда Java из кучи. Если я попытаюсь поместить в ОЗУ много элементов данных-сначала я поймаю" сбой канала связи" и далее "OutOfMemoryError".
Я зарегистрировал его, и я уменьшаю потребление памяти (удалить данные 1/2) и все в порядке.
этой com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
исключение возникает, если подключение к базе данных используется в течение длительного времени.
Это простое соединение возвращает true on connection.isClosed();
но если мы попытаемся выполнить оператор, он запустит это исключение, поэтому я предложу пойти с пулом баз данных.
возможно, я лаю на неправильное дерево здесь, но ваше исключение, похоже, указывает, что ваш сервер MySQL недоступен.
исключение в потоке "main" com.для MySQL.интерфейс jdbc.исключения.jdbc4.CommunicationsException: Связь failureThe последний пакет успешно отправлено на сервер был 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-Тип-4-Трайбер (я.г. 'в MySQL-разъем-Java с-5.1.11-Бен.банку " с " в MySQL-разъем-Java с-5.1.11.молния') в в MySQL.
вам нужно внедрить jar драйвера во время компиляции и выполнения в вашем пути к классам.
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 файл
bind-address = <IP_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,<username>,<password>);
вместо указания параметров входа
Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/projects?user=user1&password=123");
С уважением.
Если вы используете WAMP
или XAMP
сервер для установки базы данных mysql.
Тогда вы должны явно начать mysql разорвать другой мудрый он покажет
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
Я решил эту проблему простым способом, это сработало для меня. у меня была проблема с семами "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
и эта проблема решена для меня.
попробуйте изменить localhost
to 127.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.Водитель!--4--> или даже, что вы не должны especify, которые вы используете:
загрузка класс
com.mysql.jdbc.Driver'. This is deprecated. The new driver class is
com.для MySQL.СиДжея.интерфейс jdbc.Водитель". Водитель автоматически регистрируется через SPI и ручную загрузку драйвера класс, как правило, не нужен.
I изменил объявление на использование версии 5.1.38 mysql-connector-java и, в коде, я сохранил com.для MySQL.интерфейс jdbc.Водитель!--4-->.
<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) и снова подключиться. Просто нажать "Обновить" было недостаточно.