Verbinden Sie Java mit MySQL in Ubuntu Server


1

Ich versuche, meine Java-Anwendung mit MySql zu verbinden, das auf einem Ubuntu-Server 14.04 ausgeführt wird, der auf Virtual Box auf demselben Computer wie meine Anwendung installiert ist. Ich habe Mysql-Server, Mysql-Client und Libmysql-Java in Ubuntu installiert und das Ausführen von SQL-Abfragen innerhalb des Ubuntu-Servers scheint gut zu funktionieren. Meine Java-Anwendung ist:

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();
    }
}

Der Fehler, den ich erhalte, ist:

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

Alle Vorschläge werden mehr als hilfreich sein,

Danke


Wo läuft dein MySQL Server und wo läuft deine Anwendung?
AB

Meine Anwendung läuft auf einem Windows 8-Hostsystem und MySql läuft auf Ubuntu Server 14.04, der auf Virtual Box als Gast installiert ist. Vielen Dank
ggeo

Antworten:


1

Die Ausnahme tritt auf, wenn kein MySQL-Dienst ausgeführt oder abgehört wird:

  • Starten Sie den MySQL-Server

  • Überprüfen Sie die Portnummer, verwenden Sie den Standard-Port 3306 in Ihrem Code

    private static final String dbClassName = "jdbc:mysql://127.0.0.1:<your_port_number>/demodb";
  • Verwenden Sie die IP-Adresse Ihrer virtuellen Maschine

    private static final String dbClassName = "jdbc:mysql://<host_name_or_ip_address_of_the_database_server>:<your_port_number>/demodb";
  • Überprüfen Sie die Firewall auf beiden Computern

  • Pingen Sie den Host des MySQL-Servers an, um die Verbindung zu überprüfen

  • Überprüfen Sie die bind-addressin/etc/mysql/my.cnf


Da stellst du eine andere Frage in deinen Kommentaren

Ausnahme im Thread "main" java.sql.SQLException: null, Meldung vom Server: "Host '192.168.1.7' darf keine Verbindung zu diesem MySQL-Server herstellen

Hier ist die Antwort.

  • Überprüfen Sie die Einträge in der MySQL-Tabelle mysql.userin der SpalteHost

    SELECT * FROM mysql.user;

Vielen Dank für Ihre Antwort. Ich habe es versucht, indem ich immer noch den gleichen Fehler erhalte. MySql hört auf Port 3306 und ich habe überprüft, dass es ausgeführt wird. Wie kann ich die IP-Adresse meiner virtuellen Maschine sehen?
Geo

Öffnen Sie ein Terminal und starten Sie ifconfigin Ihrem VM
AB

Meine IP ist 192.168.1.9 und wenn ich sie "jdbc:mysql://192.168.1.9:3306/demodb"
eingebe,

Können Sie die IP-Adresse anpingen?
AB

Wenn ich 64 bytes from 192.168.1.9: icmp_seq=00 ttl=64 time=0.025 ms
pinge,
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.