MySql с ошибкой JAVA. Последний пакет, успешно отправленный на сервер, был 0 миллисекунд назад
Я много читал об этом исключении, но я не могу решить.
Сервер Mysql работает.
Я могу подключиться к нему из NetBeans, но я не могу подключиться к нему из Java-кода.
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:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2332)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2369)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2153)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:381)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
at java.sql.DriverManager.getConnection(DriverManager.java:579)
at java.sql.DriverManager.getConnection(DriverManager.java:243)
at javaapplication3.JavaApplication3.main(JavaApplication3.java:32)
Caused by: java.net.SocketException: Permission denied: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
at java.net.Socket.connect(Socket.java:579)
at java.net.Socket.connect(Socket.java:528)
at java.net.Socket.<init>(Socket.java:425)
at java.net.Socket.<init>(Socket.java:241)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:257)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:294)
... 15 more
Java Result: 1
Я поймаю это исключение любыми способами подключения к Mysql из java-кода, но из MysqlWorkBench и из NetBeans в порядке.
У меня нет брандмауэра. Я пробовал 127.0.0.1, результат такой же.
Ответы
Ответ 1
Попробуйте указать порт в
conn = DriverManager.getConnection("jdbc:mysql://localhost/mysql?"
+ "user=root&password=onelife");
Я думаю, у тебя должно быть что-то вроде этого:
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql?"
+ "user=root&password=onelife");
Кроме того, номер порта в моем примере (3306) является портом по умолчанию, но вы можете изменить его при установке MySQL.
Я думаю, что лучший способ указать пароль и пользователя состоит в том, чтобы отделить их от URL следующим образом:
connection = DriverManager.getConnection(url, login, password);
Ответ 2
Проблема в основном из-за того, что служба MySQL не запущена, поэтому убедитесь, что это так. Если это не так, запустите этот CMD с правами администратора, чтобы запустить его:
sc start [Your MySQL Service name]
Ответ 3
Найдите файл my.cnf и прокомментируйте строку
skip-networking
к
#skip-networking
Перезапустить mysql
Ответ 4
Попробуйте следующие предложения:
- Ваша машина может иметь статический IP; сопоставьте этот IP-адрес с файлом
hosts
как localhost
.
- Попробуйте войти в систему со своего компьютера или в сети с помощью команды
mysql
; если вход в систему успешен, это означает, что MySQL работает нормально.
Ответ 5
Эта проблема была исправлена с помощью новых соединителей mysql,
используйте http://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.38
Я использовал эту ошибку после обновления соединительной банки, проблема решена.
Ответ 6
Похоже, ваш код Java использует IPv6 вместо IPv4. Пожалуйста, попробуйте использовать 127.0.0.1
вместо localhost
. Пример: строка подключения должна быть
jdbc:mysql://127.0.0.1:3306/expeditor?zeroDateTimeBehavior=convertToNull&user=root&password=onelife
P.S.: Пожалуйста, обновите строку подключения URL.
Ответ 7
Есть две вещи
-
Отключите брандмауэр, если он есть, или добавьте исключение или проверьте, есть ли у вас правильный файл драйвера. Отключите любой антивирус, если он есть
-
а также убедитесь, что ваш тип драйвера mysql.jdbc.driver
.