Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verbinden Sie Java mit einer MySQL-Datenbank

Hier ist eine Schritt-für-Schritt-Erklärung, wie man MySQL und JDBC installiert und benutzt:

  1. Herunterladen und installieren Sie den MySQL-Server . Mach es einfach auf die übliche Weise. Merken Sie sich die Portnummer, wenn Sie sie geändert haben. Es ist standardmäßig 3306 .

  2. Herunterladen den JDBC-Treiber und fügen Sie den Klassenpfad ein , extrahieren Sie die ZIP-Datei und legen Sie die enthaltende JAR-Datei im Klassenpfad ab. Der herstellerspezifische JDBC-Treiber ist eine konkrete Implementierung des JDBC-API (Anleitung hier ).

    Wenn Sie eine IDE wie Eclipse oder Netbeans verwenden, können Sie sie dem Klassenpfad hinzufügen, indem Sie die JAR-Datei als Bibliothek hinzufügen zum Erstellungspfad in den Eigenschaften des Projekts.

    Wenn Sie es "Plain Vanilla" in der Befehlskonsole machen, müssen Sie den Pfad zur JAR-Datei im -cp angeben oder -classpath Argument beim Ausführen Ihrer Java-Anwendung.

    java -cp .;/path/to/mysql-connector.jar com.example.YourClass

    Der . ist nur dazu da, den aktuellen hinzuzufügen Verzeichnis auch in den Klassenpfad, damit com.example.YourClass gefunden werden kann und der ; ist das Klassenpfadtrennzeichen wie in Windows. In Unix und Klonen : sollte verwendet werden.

  3. Erstellen Sie eine Datenbank in MySQL . Lassen Sie uns eine Datenbank javabase erstellen . Du willst natürlich World Domination, also lass uns auch UTF-8 verwenden.

    CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    
  4. Erstellen Sie einen Benutzer für Java und grant darauf zugreifen . Einfach wegen der Verwendung von root ist eine schlechte Praxis.

    CREATE USER 'java'@'localhost' IDENTIFIED BY 'password';
    GRANT ALL ON javabase.* TO 'java'@'localhost' IDENTIFIED BY 'password';
    

    Ja, java ist der Benutzername und das password ist hier das Passwort.

  5. Bestimmen die JDBC-URL . Um die MySQL-Datenbank mit Java zu verbinden, benötigen Sie eine JDBC-URL in der folgenden Syntax:

    jdbc:mysql://hostname:port/databasename
    • hostname :Der Hostname, auf dem der MySQL-Server installiert ist. Wenn es auf demselben Computer installiert ist, auf dem Sie den Java-Code ausführen, können Sie einfach localhost verwenden . Es kann auch eine IP-Adresse wie 127.0.0.1 sein . Wenn Sie auf Verbindungsprobleme stoßen und 127.0.0.1 verwenden statt localhost gelöst haben, dann haben Sie ein Problem in Ihrer Netzwerk-/DNS-/Hostkonfiguration.

    • port :Der TCP/IP-Port, auf dem der MySQL-Server lauscht. Dies ist standardmäßig 3306 .

    • databasename :Der Name der Datenbank, mit der Sie sich verbinden möchten. Das ist javabase .

    Die endgültige URL sollte also folgendermaßen aussehen:

    jdbc:mysql://localhost:3306/javabase
  6. Testen Sie die Verbindung zu MySQL mit Java . Erstellen Sie eine einfache Java-Klasse mit einem main() Methode zum Testen der Verbindung.

    String url = "jdbc:mysql://localhost:3306/javabase";
    String username = "java";
    String password = "password";
    
    System.out.println("Connecting database...");
    
    try (Connection connection = DriverManager.getConnection(url, username, password)) {
        System.out.println("Database connected!");
    } catch (SQLException e) {
        throw new IllegalStateException("Cannot connect the database!", e);
    }
    

    Wenn Sie eine SQLException: No suitable driver erhalten , dann bedeutet dies, dass entweder der JDBC-Treiber überhaupt nicht automatisch geladen wurde oder dass die JDBC-URL falsch ist (d. h. sie wurde von keinem der geladenen Treiber erkannt). Normalerweise sollte ein JDBC 4.0-Treiber automatisch geladen werden, wenn Sie ihn einfach im Laufzeit-Klassenpfad ablegen. Um das eine oder andere auszuschließen, können Sie es jederzeit wie folgt manuell laden:

    System.out.println("Loading driver...");
    
    try {
        Class.forName("com.mysql.jdbc.Driver");
        System.out.println("Driver loaded!");
    } catch (ClassNotFoundException e) {
        throw new IllegalStateException("Cannot find the driver in the classpath!", e);
    }
    

    Beachten Sie, dass newInstance() Anruf ist nicht hier benötigt. Es dient nur dazu, den alten und fehlerhaften org.gjt.mm.mysql.Driver zu reparieren . Erklärung hier . Wenn diese Zeile ClassNotFoundException auslöst , dann wurde die JAR-Datei, die die JDBC-Treiberklasse enthält, einfach nicht in den Klassenpfad eingefügt.

    Beachten Sie, dass Sie den Treiber nicht jedes Mal laden müssen vorher verbinden. Nur einmal während des Anwendungsstarts ist genug.

    Wenn Sie eine SQLException: Connection refused erhalten oder Connection timed out oder eine MySQL-spezifische CommunicationsException: Communications link failure , dann bedeutet es, dass die DB überhaupt nicht erreichbar ist. Dies kann eine oder mehrere der folgenden Ursachen haben:

    1. IP-Adresse oder Hostname in JDBC-URL ist falsch.
    2. Hostname in JDBC-URL wird vom lokalen DNS-Server nicht erkannt.
    3. Die Portnummer fehlt oder ist in der JDBC-URL falsch.
    4. DB-Server ist ausgefallen.
    5. Der DB-Server akzeptiert keine TCP/IP-Verbindungen.
    6. Der DB-Server hat keine Verbindungen mehr.
    7. Etwas zwischen Java und DB blockiert Verbindungen, z.B. eine Firewall oder ein Proxy.

    Um das eine oder andere zu lösen, folgen Sie den folgenden Ratschlägen:

    1. Verifizieren und testen Sie sie mit ping .
    2. DNS aktualisieren oder stattdessen IP-Adresse in JDBC-URL verwenden.
    3. Verifizieren Sie es basierend auf my.cnf von MySQL DB.
    4. Starten Sie die DB.
    5. Überprüfen Sie, ob mysqld ohne die Option --skip-networking option gestartet wird .
    6. Starte die DB neu und korrigiere deinen Code entsprechend, dass er Verbindungen finally schließt .
    7. Firewall deaktivieren und/oder Firewall/Proxy konfigurieren, um den Port zuzulassen/weiterzuleiten.

    Beachten Sie das Schließen der Connection ist extrem wichtig. Wenn Sie Verbindungen nicht schließen und in kurzer Zeit viele Verbindungen erhalten, gehen der Datenbank möglicherweise die Verbindungen aus und Ihre Anwendung kann abbrechen. Erwerben Sie immer die Connection in einem try-with-resources Erklärung . Oder wenn Sie noch nicht auf Java 7 sind, schließen Sie es explizit in finally eines try-finally Block. Schließen finally soll nur sicherstellen, dass es im Ausnahmefall auch geschlossen wird. Dies gilt auch für Statement , PreparedStatement und ResultSet .

Das war es, was die Konnektivität betrifft. Sie finden hier ein fortgeschritteneres Tutorial zum Laden und Speichern von vollwertigen Java-Modellobjekten in einer Datenbank mit Hilfe einer grundlegenden DAO-Klasse.

Die Verwendung eines Singleton-Musters für die DB-Verbindung ist ein schlechter Ansatz. Siehe unter anderem:http://stackoverflow.com/q/9428573/ . Dies ist ein Anfängerfehler Nr. 1.