2014-06-20 4 views
-1

J'essaie de faire communiquer un programme Java avec un serveur MySQL hébergé avec A Small Orange. L'IP et le port qu'ils m'ont fournis sont 129.121.106.234:3306. L'utilisateur a reçu des autorisations complètes sur la base de données et, dans mon CPanel, j'ai autorisé tous les hôtes distants à se connecter à la base de données MySQL en ajoutant l'hôte d'accès "%". J'utilise Eclipse, et j'ai téléchargé et ajouté le pilote JDBC au chemin de compilation. Autant que je peux dire, l'utilisateur que j'essaie d'utiliser a des permissions complètes sur la base de données, et le serveur MySQL est ouvert à toute demande de n'importe quelle adresse IP. J'ai également essayé mes informations d'identification administrateur MySQL, avec la même erreur, donc je suis décemment confiant que le problème est avec mon code. Pas tout à fait sûr cependant, puisque je n'héberge pas le serveur MySQL moi-même.Echec du lien de communication lors de la connexion à la base de données MySQL distante

Mon code:

package com.package.IPBounce; 

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.net.URL; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.Statement; 

public class Main { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    /* 
    * Isaac the Support Ninja says: The MySQL port is 3306. The IP you use 
    * is 129.121.106.234. 
    */ 
    URL whatismyip; 
    String IP; 
    try { 
     whatismyip = new URL("http://checkip.amazonaws.com"); 
     BufferedReader in = new BufferedReader(new InputStreamReader(
       whatismyip.openStream())); 
     IP = in.readLine(); 
     System.out.println(IP); 

     Connection con = null; 
     Statement st = null; 
     ResultSet rs = null; 

        //this is just testing code until I get the connection working 
     String url = "jdbc:mysql://129.121.106.234:3306/db_name"; 
     String user = "user_name"; 
     String password = "small_password"; 
     Class.forName("com.mysql.jdbc.Driver").newInstance(); 
     con = DriverManager.getConnection(url, user, password);//error is on this line 
     st = con.createStatement(); 
     rs = st.executeQuery("SELECT VERSION()"); 

     if (rs.next()) { 
      System.out.println(rs.getString(1)); 
     } 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

} 

Le texte d'erreur:

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(Unknown Source) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
at java.lang.reflect.Constructor.newInstance(Unknown Source) 
at com.mysql.jdbc.Util.handleNewInstance(Util.java:408) 
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1137) 
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:356) 
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2504) 
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2541) 
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2323) 
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:832) 
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
at java.lang.reflect.Constructor.newInstance(Unknown Source) 
at com.mysql.jdbc.Util.handleNewInstance(Util.java:408) 
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:417) 
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:344) 
at java.sql.DriverManager.getConnection(Unknown Source) 
at java.sql.DriverManager.getConnection(Unknown Source) 
at com.package.IPBounce.Main.main(Main.java:39) 
Caused by: java.net.ConnectException: Connection timed out: connect 
at java.net.DualStackPlainSocketImpl.connect0(Native Method) 
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) 
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) 
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) 
at java.net.AbstractPlainSocketImpl.connect(Unknown Source) 
at java.net.PlainSocketImpl.connect(Unknown Source) 
at java.net.SocksSocketImpl.connect(Unknown Source) 
at java.net.Socket.connect(Unknown Source) 
at java.net.Socket.connect(Unknown Source) 
at java.net.Socket.<init>(Unknown Source) 
at java.net.Socket.<init>(Unknown Source) 
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:258) 
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:306) 
... 15 more 

Edit: J'ai trouvé la solution. Mon service d'hébergement bloquait les requêtes MySQL au pare-feu. Effacé cela, maintenant cela fonctionne à merveille.

+0

est l'hôte capable de surveiller le trafic et vérifiez que vous faites une connexion tcp/3306? Je n'étais pas en mesure de me connecter à ce port sur cette adresse IP, donc "ouvert à toute demande de n'importe quelle adresse IP" est soit incorrect, soit le serveur lui-même n'est pas joignable. – admdrew

Répondre

-1

Cette question a reçu une réponse ici:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

S'il vous plaît essayer les étapes de la réponse acceptée et voir si votre problème est résolu. D'après mon expérience, j'ai eu ce problème lorsque mon fichier de configuration MySql a permis seulement l'accès localhost. Remplacez localhost par l'adresse IP.

+0

J'aurais dû le mentionner, j'ai essayé toutes ces étapes, et aucune d'elles ne marche. J'aurais dû le mettre, désolé. – user2221135

0

La seule chose que je vois comme un problème possible est l'appel "newInstance()". Essayez de supprimer cela et voir si cela fonctionne.

De:

Class.forName("com.mysql.jdbc.Driver").newInstance(); 

Pour:

Class.forName("com.mysql.jdbc.Driver"); 
Questions connexes