Hier ist eine Schritt-für-Schritt-Erklärung, wie man MySQL und JDBC installiert und benutzt:
-
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
. -
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, damitcom.example.YourClass
gefunden werden kann und der;
ist das Klassenpfadtrennzeichen wie in Windows. In Unix und Klonen:
sollte verwendet werden. -
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;
-
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 daspassword
ist hier das Passwort. -
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 einfachlocalhost
verwenden . Es kann auch eine IP-Adresse wie127.0.0.1
sein . Wenn Sie auf Verbindungsprobleme stoßen und127.0.0.1
verwenden stattlocalhost
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äßig3306
. -
databasename
:Der Name der Datenbank, mit der Sie sich verbinden möchten. Das istjavabase
.
Die endgültige URL sollte also folgendermaßen aussehen:
jdbc:mysql://localhost:3306/javabase
-
-
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 fehlerhaftenorg.gjt.mm.mysql.Driver
zu reparieren . Erklärung hier . Wenn diese ZeileClassNotFoundException
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 oderConnection timed out
oder eine MySQL-spezifischeCommunicationsException: Communications link failure
, dann bedeutet es, dass die DB überhaupt nicht erreichbar ist. Dies kann eine oder mehrere der folgenden Ursachen haben:- IP-Adresse oder Hostname in JDBC-URL ist falsch.
- Hostname in JDBC-URL wird vom lokalen DNS-Server nicht erkannt.
- Die Portnummer fehlt oder ist in der JDBC-URL falsch.
- DB-Server ist ausgefallen.
- Der DB-Server akzeptiert keine TCP/IP-Verbindungen.
- Der DB-Server hat keine Verbindungen mehr.
- 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:
- Verifizieren und testen Sie sie mit
ping
. - DNS aktualisieren oder stattdessen IP-Adresse in JDBC-URL verwenden.
- Verifizieren Sie es basierend auf
my.cnf
von MySQL DB. - Starten Sie die DB.
- Überprüfen Sie, ob mysqld ohne die Option
--skip-networking option
gestartet wird . - Starte die DB neu und korrigiere deinen Code entsprechend, dass er Verbindungen
finally
schließt . - 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 dieConnection
in einemtry-with-resources
Erklärung . Oder wenn Sie noch nicht auf Java 7 sind, schließen Sie es explizit infinally
einestry-finally
Block. Schließenfinally
soll nur sicherstellen, dass es im Ausnahmefall auch geschlossen wird. Dies gilt auch fürStatement
,PreparedStatement
undResultSet
.
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.