2016-05-11 1 views
2

Ни одно из решений, которые я нашел в Интернете, не работает. я держать ударОшибка «Ошибка связи» при попытке подключения к MySQL с использованием JDBC

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Связь отказа канала

Я пытаюсь соединить БД MySQL с другого сервера. Я могу заверить вас, что информация о URL-адресе, пользователе и пароле верна, поскольку она работает, когда я пытаюсь подключить db с помощью программного обеспечения PgAdmin. Однако он не удался, когда я пытаюсь выполнить использование кода Java (через NetBean 8.1). Итак, следующий мой код:

import oracle.jdbc.pool.OracleDataSource; 
import java.sql.*; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 
public class Client9{ 
     public static void main(String[] args) { 
      System.out.println("MySQL Connect Example."); 
      Connection conn = null; 
      String url = "jdbc:mysql://MySQLUrl:3306/"; 
      String dbName = "MySQL_dbName"; 
      String driver = "com.mysql.jdbc.Driver"; 
      String userName = "user"; 
      String password = "password"; 
      try { 
       Class.forName(driver).newInstance(); 
       conn = DriverManager.getConnection(url+dbName,userName,password); 
       System.out.println("Connected to the database"); 
       conn.close(); 
       System.out.println("Disconnected from database"); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 

} 

Сообщение об ошибке, как показано ниже:

run: 
MySQL Connect Example. 
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:62) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:422) 
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1117) 
at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:673) 
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1084) 
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2465) 
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2498) 
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2283) 
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:822) 
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:422) 
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:404) 
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:317) 
at java.sql.DriverManager.getConnection(DriverManager.java:664) 
at java.sql.DriverManager.getConnection(DriverManager.java:247) 
at netiqcustomprov.Client9.main(Client9.java:35) 
Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost. 
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:3052) 
at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:597) 
... 16 more 
BUILD SUCCESSFUL (total time: 1 minute 0 seconds) 

Solutions я пытался до сих пор: я импортировал ojdb14.jar и mysql-connector-java-5.1.23-bin.jar в библиотеку. Я попробовал все 3 различные методы getConnection()

  • getConnection(String url)
    (где моя строка URL = "JDBC: MySQL: // MySQLUrl: 3306/MySQL_dbName пользователь = пользователь & пароль = пароль")
  • getConnection(String url, Properties info)
  • getConnection(String url, String user, String password)

Я также пытался зарегистрировать драйвер, используя следующую команду:

Driver myDriver = new oracle.jdbc.driver.OracleDriver(); 
DriverManager.registerDriver(myDriver); 

Одним из решений, которые я нашел, является комментарий правила «skip-networking» в файле my.cnf. Однако я не смог найти такой файл на сервере. (Сервер работает на базе ОС Linux)

Очень ценит помощь в решении этой проблемы. Заранее спасибо

ОБНОВЛЕНИЕ: См. Мой ответ. Еще раз прошу прощения за мою глупую ошибку.

+0

Оракул не имеет ничего общего здесь. Можем ли мы увидеть, что на этом Linux-сервере запущен 'sudo lsof -i: 3306', также вы попробовали' mysql -u user -p' в командной строке (снова на этом сервере) –

+0

«ping MySQLUrl» с машины запуск java-кода также может помочь диагностике –

+0

Работает ли сервер MySQL? Можете ли вы подключиться от любого клиента mysql? – Gangaraju

ответ

-1

Наконец-то я знаю, в чем была ошибка. Это была действительно глупая ошибка. Это был postgres db вместо mysql. Итак, я просто меняю URL и драйвер.

String url = "jdbc:postgresql:://MySQLUrl:3306/"; 
String driver = "org.postgresql.Driver"; 

Извините мои ошибки и спасибо людям, которые пытались мне помочь.

Смежные вопросы