2017-05-12 3 views
0

Ich kann keine entfernte Datenbank verbinden. Wenn ich meine eigene Datenbank auf localhost anschließe, verbindet sie sich. Was ist los mit dir?Verbindung abgelehnt: connect, kann keine Datenbank verbinden mysql

Exception in thread "main" java.lang.IllegalStateException: Cannot connect the database! 

    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. 

Caused by: java.net.ConnectException: Connection refused: connect 

Java-Code:

String url = "jdbc:mysql://ipadress:3306/database?autoReconnect=true&useSSL=false"; 
     String username = "username"; 
     String password = "password"; 
     String query = "SELECT * FROM database"; 

     System.out.println("Connecting database..."); 
      try { 
     // The newInstance() call is a work around for some 
     // broken Java implementations 

     Class.forName("com.mysql.jdbc.Driver").newInstance(); 
    } catch (Exception ex) { 
     // handle the error 
    } 
     try (Connection connection = DriverManager.getConnection(url, username, password)) { 
      System.out.println("Database connected!"); 
      //Uruchamiamy zapytanie do bazy danych 
         Statement stmt = connection.createStatement(); 
         ResultSet rs = stmt.executeQuery(query); 

         while (rs.next()) { 

         } 

         connection.close(); 
     } catch (SQLException e) { 
     throw new IllegalStateException("Cannot connect the database!", e); 
     } 
    } 

ich Datenbank auf PHPMyAdmin anmelden können, habe ich keine Root-Account, es meines Freundes Datenbank ist. Ich habe überprüft, ob Port 3306 hier offen ist: http://www.yougetsignal.com/tools/open-ports/ und es ist geschlossen. Wo kann ich es öffnen? In Router-Einstellungen in "Portweiterleitung"? Welche private IP und Typ (TCP oder UDP) sollte ich einstellen, um diesen Port zu öffnen?

+0

Können Sie Ihren Code teilen? –

+0

Sind die URL und die Anmeldeinformationen für die entfernte Datenbank korrekt angegeben? –

+0

Ja, sie sind Ich änderte sie, weil ich meine Datenbankadresse nicht teilen möchte – Jkrr

Antwort

0

(Entschuldigt, wenn diese Antwort ist unvollständig, aber es ist zu viel, die nicht in den Kommentaren passen)

1) Keine Ausnahmen ignorieren. Das ist schlecht: mit und nichts anderes in Ihrem catch Block, im Falle eines Fehlers dort, wird Ihr Code nicht den Fehler melden, und wird weiter mit der Ausführung (es sollte verlassen/brechen/zurück, je nach wo das Stück Code ist).

2) Ich denke, Überprüfung "SHOW GLOBAL VARIABLES LIKE 'PORT';" ist nicht genug. Fragen Sie Ihren Freund, ob der Datenbankdämon tatsächlich an Port 3306 auf einer Netzwerkschnittstelle hört, die Sie erreichen können. MySQL kann mit deaktiviertem Netzwerk konfiguriert werden (skip-networking), oder nur für den lokalen Rechner aktiviert (bind-address=127.0.0.1 oder localhost - es sollte bind-address=0.0.0.0 oder bind-address=hostname oder öffentliche IP-Adresse sein ...).

für diese selbst zu überprüfen, wenn Sie auf Linux sind, versuchen Sie mit nc oder telnet (installieren nc, wenn Sie es nicht haben): nc remotehost 3306. Wenn Sie "Verbindung abgelehnt" erhalten, liegt der Fehler definitiv nicht in Ihrem Java-Code, sondern in der Server-Konfiguration.

+0

"SHOW GLOBAL VARIABLES LIKE 'PORT';" und es ist auf 3306, ich werde ihn bitten, diese Sache zu tun. Ich habe meine Frage aktualisiert, bitte überprüfen Sie sie. – Jkrr

+0

Was ich meine ist, ich denke, dies zu überprüfen ist nicht genug, er muss die 'my.cnf' Konfigurationsdatei mit den Schlüsseln überprüfen, die ich erwähnte. Wird bearbeiten, um zu klären. –

+0

Was ist, dass Port 3306 in meinem Router geschlossen ist? – Jkrr

Verwandte Themen