Skip to content

Java MySQL (JDBC) Tutorial

von Simon Michel am 05.09.2010

1287078593_source_java

Nicht selten ist es notwendig über Java Daten aus einer MySQL Datenbank auszulesen. Und wie es bei den meisten Fällen so ist, ist der erste Schritt der schwierigste. Um diesen Schritt zu vereinfachen, wird eine kleine Demo Anwendung erstellt die die notwendigen Zeilen an Code benötigt, um Daten aus einer MySQL Datenbank auszulesen. Die HSQLDB ist ein eingebettetes Datenbanksystem und bietet eine weitere Variante zu der MySQL Datenbank.

Eine Alternative zu der nachfolgenden Umsetzung bietet das Spring Framework. Dank der Spring JDBC-API kann die Verbindung zu einer (MySQL) Datenbank schneller und vor allem sicherer hergestellt werden. Mehr Informationen in dem Blogartikel Spring MySQL (JDBC) Tutorial.

Bevor jedoch losgelegt werden kann, müssen zunächst einige Vorbereitungen getroffen werden. Hierzu benötigen wir zum einen erst einmal den JDBC Datenbanktreiber. Offiziell heißt dieser Connector/J und steht auf der MySQL Homepage im Downloadbereich zur Verfügung.

Projekt Vorbereitungen

  1. Neues Projekt erstellen
  2. Paket erstellen: de.michel.mysql.readData
  3. Klasse erstellen: MySQLConnection.java
  4. Klasse erstellen: Test.java

MySQL JDBC-Treiber hinzufügen

Nach der Projekterstellung, muss der JDBC-Treiber dem Projekt noch hinzugefügt werden.

  1. Project Properties (Rechtsklick auf das Projekt >> Properties)
  2. Java Build Path
  3. Libraries
  4. Add External JARs…
  5. mysql-connector-java-5.0.8-bin.jar hinzufügen

Java Build Path

Der MySQL JDBC-Treiber ist nun dem Projekt hinzugefügt. Zur Erläuterung sei gesagt, das die .jar Datei alle Funktionalitäten enthält, welche für einen MySQL Datenbankzugriff notwendig sind. Somit kann nun der Zugriff über MySQL auf die Daten über den Quellcode stattfinden.

Hinweis: Für den content der Daten sorgt Sakila. Sakila ist eine Testdatenbank die von MySQL für Testzwecke bereitgestellt wird und hier heruntergeladen werden kann. Wie ein MySQL Server mit Sakila zu Testzwecken lokal in Betrieb genommen werden kann wird im Artikel MySQL Server lokal installieren beschrieben.

Quellcode

MySQLConnection.java

package de.michel.mysql.readData;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class MySQLConnection {

	private static MySQLConnection instance = null;
	private static Connection conn = null;

	// Hostname
	private static String dbHost = "localhost";

	// Port -- Standard: 3306
	private static String dbPort = "3306";

	// Datenbankname
	private static String database = "sakila";

	// Datenbankuser
	private static String dbUser = "root";

	// Datenbankpasswort
	private static String dbPassword = "toor";

	private MySQLConnection() {
		try {

			// Datenbanktreiber für ODBC Schnittstellen laden.
			// Für verschiedene ODBC-Datenbanken muss dieser Treiber
			// nur einmal geladen werden.
			Class.forName("com.mysql.jdbc.Driver");

			// Verbindung zur ODBC-Datenbank 'sakila' herstellen.
			// Es wird die JDBC-ODBC-Brücke verwendet.
			conn = DriverManager.getConnection("jdbc:mysql://" + dbHost + ":"
					+ dbPort + "/" + database + "?" + "user=" + dbUser + "&"
					+ "password=" + dbPassword);
		} catch (ClassNotFoundException e) {
			System.out.println("Treiber nicht gefunden");
		} catch (SQLException e) {
			System.out.println("Connect nicht moeglich");
		}
	}

	public static MySQLConnection getInstance()
	{
		if(instance == null)
			instance = new MySQLConnection();
		return instance;
	}

	/**
	 * Liefert den Nachname, Vornamen
	 */
	public void getName()
	{

		if(conn != null)
		{
			// Anfrage-Statement erzeugen.
			Statement query;
			try {
				query = conn.createStatement();

				// Ergebnistabelle erzeugen und abholen.
				String sql = "SELECT first_name, last_name " + "FROM actor "
						+ "ORDER BY last_name";
				ResultSet result = query.executeQuery(sql);

				// Ergebnissätze durchfahren.
				while (result.next()) {
					String first_name = result.getString("first_name"); // Alternativ: result.getString(1);
					String last_name = result.getString("last_name"); // Alternativ: result.getString(2);
					String name = last_name + ", " + first_name;
					System.out.println(name);
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}

Test.java

Zum testen rufen wir in der Test.java Datei die Funktion auf, die uns die Namen in der console ausgeben soll.

package de.michel.mysql.readData;

public class Test
{
	public static void main(String[] args)
	{
		MySQLConnection.getInstance().getName();
	}
}

Ergebnis

Das Ergebnis wird in der Konsole ausgegeben:

AKROYD, DEBBIE
AKROYD, KIRSTEN
AKROYD, CHRISTIAN
ALLEN, MERYL
ALLEN, CUBA
ALLEN, KIM
ASTAIRE, ANGELINA
BACALL, RUSSELL
BAILEY, JESSICA
BAILEY, AUDREY
BALE, HARRISON
BALL, RENEE
BARRYMORE, JULIA
BASINGER, VIVIEN
....

Gefällt der Blogeintrag?

Dann empfehle itblogging.de weiter und abonniere den RSS Feed.
   

Von → Java

15 Kommentare
  1. Torsten Roehner Permalink

    Definitiv ein cooles Script, als Nicht- Java Programmierer gelang es mir mit Hilfe des kleinen Programms und Eclipse innerhalb von 10 Minuten die JDBC Schnittstelle gegen meine Datenbank zu testen.

    Viele Dank

  2. Also da muss ich echt mal sagen:
    Vielen vielen Dank!
    Das Tutorial ist echt gut und dennoch einfach und wie bei meinem Vorposter, hat es auch bei mir 10min. gedauert bis ich also mit der Struktur der JDBC vertraut wurde und alles weitere lässt sich ausbauen, zumal, wenn man schon mit MySQL eine Menge in PHP gelernt hat.
    Also nochmal vielen vielen Dank!

  3. chris Permalink

    Wäre ich doch nur ein wenig früher darauf gestossen. Das hier ist echt super und sehr gut veranschaulicht erklärt. 5 Sterne!

  4. Mostal Permalink

    Hi, die Frage klingt vlt. blöd, aber muss zum Ausführen des Programmes beim User irgendetwas auser der Datenbank installiert sein? Würde mich über eine Antwort sehr freuen, danke.

  5. Simon Michel Permalink

    Hallo Mostal,
    für das Ausführen von Java benötigst du natürlich die JRE. Die Datenbank muss ja noch nicht einmal lokal vorhanden sein, sondern kann auch bei einem Hoster liegen.

  6. Mostal Permalink

    Hallo, ja das ist mir schon klar, ich habe mich nur falsch ausgedrückt: Brauch ich noch zusätzlich zum JConnector einen Treiber bzw. ODBC auf dem Clientrechner?

  7. Simon Michel Permalink

    Wenn du dein Projekt schlussendlich als ausführbare Datei exportierst, sollten alle notwendigen Klassen, Treiber etc. darin enthalten sein. Vorausgesetzt du kannst die oben beschriebenen Dateien lokal aus Eclipse (oder einer anderen Entwicklungsumgebung) heraus starten.

  8. youpwnT Permalink

    Wow! Genau so etwas habe ich gesucht! Ich werde mich zwar noch ziemlich ausführlich mit dem Connector/J beschäftigen müssen, aber dieses Tutorial veranschulicht sehr gut die Arbeitsweise des JDBC.. Vielen Dank!

  9. Bin gerade beim Stöbern in Deinem Blog auf diesen Beitrag gestoßen.
    Sehr gut erklärt, hat mich gleich wieder an mein JavaProgramme erinnert :-)

    Was ich allerdings nicht ganz verstehe ist, wie Du den Treiber lädst, vielleicht kannst Du mir kurz den Unterschied zu meiner Variante erklären .

    Ich hab das bisher immer so gemacht.


    Driver drv;
    drv = new com.mysql.jdbc.Driver();

  10. Simon Michel Permalink

    Hallo Christian,

    da die Treiberklasse bereits in dem Classpath liegt, kann diese anschließend mit Hilfe von reflection über den vollqualifizierten Namen geladen werden. Dies passiert demnach mit “Class.forName(…)”.
    In deinem Fall erzeugst du zunächst ein “Driver” Objekt und registriert ihn anschließend, was grundsätzlich auch klappen sollte.

  11. Chloroplast Permalink

    wie müsste ich den code verändern das ich auf eine datenbank zugreifen kann, welche auf einem seperaten server läuft (subdomain von http://www.bplaced.net)?

    • Simon Michel Permalink

      Hallo Chloroplast,

      du müsstest die Variable “dbHost” neu zuweisen (in deinem Fall auf bplaced.net), den Datenbanknamen, den User (“dbUser”) und das Passwort (dbPassword) anpassen. Zusätzlich musst du die MySQL Datenbank für einen externen Zugriff erlauben.

      Gruß

  12. hallo, ich bin ziemlich neu in Android apps-Entwickeln. ich habe die komplette Anweisung befolgt, bloß mit meinen persönlichen MySQL-Daten und ich bekomme in der Console immer diese Meldung:

    Error occurred during initialization of VM
    java/lang/NoClassDefFoundError: java/lang/ref/FinalReference

    Was soll ich machen?

Einen Kommentar hinterlassen

Beachte: XHTML ist erlaubt. Ihre E-Mail-Adresse wird nie angezeigt.

Abonniere diese Seite via RSS