Question Connectez java avec mysql sur le serveur Ubuntu


J'essaie de connecter mon application Java avec MySQL s'exécutant sur un serveur Ubuntu 14.04 installé sur Virtual Box dans la même machine que mon application. J'ai installé mysql-server, mysql-client et libmysql-java dans ubuntu et l'exécution de requêtes SQL dans le serveur ubuntu semble fonctionner correctement. Mon application Java est:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class UploadData {
 // The JDBC Connector Class.
  private static final String dbClassName = "com.mysql.jdbc.Driver";

  private static final String CONNECTION =
                          "jdbc:mysql://127.0.0.1/demodb";

  public static void main(String[] args) throws
                             ClassNotFoundException,SQLException
  {
    System.out.println(dbClassName);
    // Class.forName(xxx) loads the jdbc classes and
    // creates a drivermanager class factory
    Class.forName(dbClassName);

    // Properties for user and password. Here the user and password are both 'paulr'
    Properties p = new Properties();
    p.put("user","*******");
    p.put("password","******");

    // Now try to connect
    Connection c = DriverManager.getConnection(CONNECTION,p);

    System.out.println("It works !");
    c.close();
    }
}

L'erreur que je reçois est:

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(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:389)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1038)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:338)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2237)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2270)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2069)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:794)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:44)
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:389)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:325)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at server.UploadData.main(UploadData.java:32)

 Caused by: java.net.ConnectException: Connection refused: 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 com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:213)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:297)
... 15 more

Toutes les suggestions seront plus que utiles,

Je vous remercie


1
2018-06-10 08:32


origine


Où fonctionne votre serveur MySQL et où exécute votre application? - A.B.
Mon application s'exécute sur le système hôte Windows 8 et MySQL s'exécute sur Ubuntu Server 14.04 installé sur Virtual Box en tant qu'invité. Je vous remercie - ggeo


Réponses:


L'exception se produit lorsqu'il n'y a pas de service mysql en cours d'exécution ou d'écoute:

  • Démarrer le serveur MySQL

  • Vérifiez le numéro de port, vous utilisez le port standard 3306 dans votre code

    private static final String dbClassName = "jdbc:mysql://127.0.0.1:<your_port_number>/demodb";
    
  • Utilisez l'adresse IP de votre machine virtuelle

    private static final String dbClassName = "jdbc:mysql://<host_name_or_ip_address_of_the_database_server>:<your_port_number>/demodb";
    
  • Vérifiez le pare-feu sur les deux machines

  • Ping l'hôte du serveur MySQL pour vérifier la connexion

  • Vérifier la bind-address dans /etc/mysql/my.cnf


Puisque vous posez une autre question dans vos commentaires

Exception dans le thread "main" java.sql.SQLException: null, message de   server: "L'hôte '192.168.1.7' n'est pas autorisé à se connecter à MySQL   serveur

voici la réponse.

  • Vérifiez les entrées dans la table MySQL mysql.user dans la colonne Host 

    SELECT * FROM mysql.user;
    

1
2018-06-10 09:18



Merci pour votre réponse. J'ai essayé ceci par je reçois toujours la même erreur. MySql écoute le port 3306 et j'ai vérifié qu'il était en cours d'exécution. Comment puis-je voir l'adresse IP de ma machine virtuelle? - ggeo
Ouvrir un terminal et démarrer ifconfig dans votre VM - A.B.
Mon IP est 192.168.1.9 et quand je le mets "jdbc:mysql://192.168.1.9:3306/demodb" Je reçois toujours la même erreur - ggeo
Pouvez-vous cingler l'adresse IP? - A.B.
Quand je cingle je reçois 64 bytes from 192.168.1.9: icmp_seq=00 ttl=64 time=0.025 ms etc - ggeo