web-dev-qa-db-fra.com

jdbc: impossible de créer une connexion au serveur de base de données

J'essaie de connecter la base de données mysql en utilisant jdbc. Voici ma classe de connexion à la base de données:

public class Database {
    String userName = "myUserName";
    String password = "myPass";

    String url = "jdbc:mysql://xxx.xxx.xxx.xxx:3306/database_Name?autoReconnect=true&useSSL=false";

    public void connect()
    {
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();

            Connection conn = DriverManager.getConnection(url,userName,password);

            Statement statement = conn.createStatement();
            String queryString = "select * from users";
            ResultSet rs = statement.executeQuery(queryString);
            while (rs.next()) {
                System.out.println(rs.getString(2));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Pour l'instant, vous pouvez supposer que j'appelle cette méthode comme:

new Database().connect();

Et je reçois cette exception:

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
    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:423)
    at com.mysql.jdbc.Util.handleNewInstance(Util.Java:425)
    at com.mysql.jdbc.Util.getInstance(Util.Java:408)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.Java:918)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.Java:897)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.Java:886)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.Java:860)
    at com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.Java:2163)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.Java:2088)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.Java:806)
    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:423)
    at com.mysql.jdbc.Util.handleNewInstance(Util.Java:425)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.Java:410)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.Java:328)
    at Java.sql.DriverManager.getConnection(DriverManager.Java:664)
    at Java.sql.DriverManager.getConnection(DriverManager.Java:247)
    at Database.<init>(Database.Java:17)
    at ServerTest.main(ServerTest.Java:8)
    at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:62)
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
    at Java.lang.reflect.Method.invoke(Method.Java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.Java:147)
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:62)
    at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:45)
    at Java.lang.reflect.Constructor.newInstance(Constructor.Java:423)
    at com.mysql.jdbc.Util.handleNewInstance(Util.Java:425)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.Java:989)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.Java:341)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.Java:2251)
    at com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.Java:2104)
    ... 19 more
Caused by: Java.net.ConnectException: Connection refused: connect
    at Java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at Java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.Java:79)
    at Java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.Java:350)
    at Java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.Java:206)
    at Java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.Java:188)
    at Java.net.PlainSocketImpl.connect(PlainSocketImpl.Java:172)
    at Java.net.SocksSocketImpl.connect(SocksSocketImpl.Java:392)
    at Java.net.Socket.connect(Socket.Java:589)
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.Java:211)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.Java:300)
    ... 21 more

* J'ai ajouté% pour accéder à la base de données à distance.

* La partie Java fonctionne pour localhost mais lorsque j'essaie cette base de données distante, elle échoue.

* La base de données et les tables sont créées (cela ne pose aucun problème).

Alors, où est le problème?

6
Ali İ.

Partie Java fonctionnant pour localhost mais lorsque j'essaie cette base de données distante, elle échoue

Cela signifie que votre serveur MySql est lié à localhost et n'est pas visible à l'extérieur. Veuillez définir bind-address propriété dans votre fichier de conf MySql à adresse IP réelle de l'hôte.

Par exemple: bind-address = 192.168.1.26

Par adresse IP réelle, je veux dire celle qui est visible par votre client où Java est en cours d'exécution. Il peut s'agir d'une adresse intranet ou d'une adresse IP publique. Vous devrez peut-être en utiliser pare-feu si vous allez exposer votre adresse IP publique.

3
code