Galileo Computing < openbook >
Galileo Computing - Professionelle Buecher. Auch fuer Einsteiger.
Galileo Computing - Professionelle Buecher. Auch fuer Einsteiger.


Kompendium der Informationstechnik
 von Sascha Kersken
EDV-Grundlagen, Programmierung, Mediengestaltung
Buch: Kompendium der Informationstechnik
gp Kapitel 7 Datenbanken
  gp 7.1 Übersicht über Datenbanktypen
    gp 7.1.1 Einzeltabellendatenbanken
    gp 7.1.2 Relationale Datenbanken
    gp 7.1.3 Objektorientierte Datenbanken
  gp 7.2 MySQL – ein konkretes DBMS
    gp 7.2.1 MySQL installieren und konfigurieren
    gp 7.2.2 Erste Schritte mit MySQL
  gp 7.3 SQL-Abfragen
    gp 7.3.1 Datenbanken und Tabellen erzeugen
    gp 7.3.2 Auswahlabfragen
    gp 7.3.3 Einfüge-, Lösch- und Änderungsabfragen
  gp 7.4 Grundlagen der Datenbankprogrammierung
  gp 7.5 Zusammenfassung

gp

Prüfungsfragen zu diesem Kapitel (extern)


Galileo Computing

7.4 Grundlagen der Datenbankprogrammierung  toptop

Beinahe jede ernst zu nehmende Programmiersprache besitzt eine Schnittstelle zu einer oder sogar mehreren Datenbanken. Es ist erheblich praktischer, Daten für verteilte Anwendungen zentral in einer Datenbank abzulegen und aus Programmen darauf zuzugreifen, als diese Daten in einer selbst entwickelten Datenstruktur zu speichern.

JDBC

Die meisten Datenbankanbindungen für Programmiersprachen sind in der Lage, auf mehrere unterschiedliche SQL-Datenbanken zuzugreifen. In diesem Abschnitt finden Sie eine kurze Einführung in die Datenbankschnittstelle JDBC, über die Sie aus Java-Programmen heraus auf beliebige Datenbanken zugreifen können.

JDBC ist keine Schnittstelle zu einer bestimmten Datenbank, sondern eine unabhängige, allgemeine API, die mit vielen unterschiedlichen Treibern zusammenarbeitet. Die meisten dieser Treiber stammen von den jeweiligen Datenbankanbietern selbst, andere werden von Drittanbietern geliefert. An dieser Stelle sollen zwei dieser Treiber explizit erwähnt werden:

gp  Die JDBC-ODBC-Bridge ist bereits von Hause aus in das Java 2 SDK eingebaut und bietet Zugriff auf beliebige Datenbanken mit ODBC-Anbindung. ODBC (Open Database Connectivity) ist eine von Microsoft entwickelte Technologie, die seit langem in alle Windows-Versionen eingebaut ist und den Zugriff auf unzählige Datenbanken bereitstellt. Die JDBC-ODBC-Bridge war vor allem bei der Einführung von JDBC wichtig, weil dadurch indirekt eine Vielzahl von Datenbanktreibern zur Verfügung stand.
    Wenn Sie ODBC verwenden möchten, müssen Sie zunächst über die Windows-Systemsteuerung eine Datenbank als ODBC-Datenquelle einrichten.
       
gp  MySQL Connector/J stammt von MySQL AB, ist ein Open-Source-Projekt wie MySQL selbst und kann von der MySQL-Website heruntergeladen werden. Nachdem Sie das Archiv entpackt haben, finden Sie im äußersten Verzeichnis eine Datei namens mysql-connector-java-3.0.7-stable-bin.jar (oder eine höhere Version als 3.0.7). Den Pfad zu dieser Datei müssen Sie zu Ihrem CLASSPATH hinzufügen (siehe Kapitel 5, Grundlagen der Programmierung).

Um JDBC in Ihrem Java-Programm zu verwenden, müssen Sie zuerst die JDBC-Klassen importieren:

import java.sql.*;

JDBC-Treiber laden

Einen JDBC-Treiber können Sie über Class.forName() laden. Das sieht für die JDBC-ODBC-Bridge folgendermaßen aus:

try {
   Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch (ClassNotFoundException e) {
   System.out.println         ("JDBC-ODBC-Treiber nicht gefunden.");
}

Die entscheidende Zeile für das Laden von MySQL Connector/J sieht entsprechend so aus:

Class.forName("com.mysql.jdbc.Driver");

Datenbankverbindung herstellen

Der nächste Schritt besteht darin, über den Treiber eine Verbindung zur gewünschten Datenbank herzustellen. Dafür besitzt jeder JDBC-Treiber sein eigenes JDBC-URL-Schema. Eine Verbindung über die JDBC-ODBC-Bridge, in diesem Beispiel zu einer Datenbank namens supermarkt, funktioniert folgendermaßen:

Connection conn = DriverManager.getConnection
     ("jdbc:odbc:supermarkt", "user", "pass");

Statt user und pass müssen Sie selbstverständlich Ihren Usernamen und Ihr Passwort eintragen, die Sie zum Zugriff auf die Datenbank berechtigen. Einige Datenbanksysteme besitzen keinen Passwortschutz; hier müssen Sie zwei leere Strings ("") übergeben.

MySQL-Connector/J-URLs sehen ein wenig anders aus; hier müssen Sie den Netzwerknamen des Rechners angeben, auf dem die Datenbank läuft. Internetnamen und -adressen werden in Kapitel 13, Netzwerkhardware und -protokolle, beschrieben. Wenn der MySQL-Server auf Ihrem eigenen Rechner läuft, erfolgt ein Zugriff auf die Datenbank supermarkt (in diesem Fall ohne Benutzername und Passwort) wie folgt:

Connection conn = DriverManager.getConnection
     ("jdbc:mysql://localhost/supermarkt", "", "");

localhost ist die Netzwerkbezeichnung für den lokalen Rechner. Falls sie auf Ihrem Rechner nicht unterstützt wird, können Sie stattdessen die numerische Adresse 127.0.0.1 verwenden.

Statement

Nachdem die Verbindung hergestellt wurde, benötigen Sie ein Statement-Objekt, das dazu verwendet wird, SQL-Abfragen an die Datenbank weiterzugeben. Das Objekt wird folgendermaßen eingerichtet:

Statement st = conn.createStatement();

Über das Statement-Objekt (hier st) können Sie SQL-Abfragen ausführen. Es besitzt die Methoden executeQuery() für Auswahlabfragen und execute() für alle Abfragen, die Änderungen an der Datenbank vornehmen. Beispielsweise können Sie folgendermaßen einen Datensatz in die Tabelle ARTIKEL einfügen:

try {
   st.execute ("INSERT INTO ARTIKEL (ARTNAME, PREIS, 
MWST) VALUES (\"Tomaten\", 199, \"7\")");
}
catch (SQLException e)
{
   // SQL-Abfrage-Ausnahme behandeln
}

ResultSet

Die Methode executeQuery() liefert ein ResultSet-Objekt zurück, aus dem Sie die Ergebnisdatensätze auslesen können. Die folgende Auswahlabfrage liest alle Datensätze aus der Tabelle ARTIKEL:

ResultSet rs = st.executeQuery ("SELECT * FROM ARTIKEL");

Mit der ResultSet-Methode next() können Sie das Ergebnis nun Zeile für Zeile abarbeiten. Um die einzelnen Felder eines Datensatzes auszulesen, bietet ResultSet eine Reihe verschiedener get-Methoden an, die die verschiedenen SQL-Datentypen in passende Java-Datentypen umsetzen. Beispielsweise können Sie die Inhalte von ARTIKEL aus dem soeben ermittelten ResultSet folgendermaßen auf der Konsole ausgeben:

while (rs.next()) {
   System.out.print ("Artikel: "
        + rs.getString ("ARTNAME") + "   ");
   System.out.print ("Preis: "
        + rs.getInt ("PREIS") + "   ");
   System.out.println ("MWSt-Satz: "
        + rs.getString ("MWST"));
}

SQL-Datentypen in Java

Tabelle 7.11 zeigt die wichtigsten SQL-Datentypen, die korrespondierenden Java-Datentypen und die zuständigen get-Methoden, um sie aus einem ResultSet zu lesen.


Tabelle 7.11   Wichtige SQL-Datentypen, ihre Java-Entsprechung und die passenden ResultSet-get-Methoden

SQL-Datentyp Java-Datentyp get-Methode
CHAR String getString()
VARCHAR String getString()
INT int getInt()
FLOAT double getDouble()
DOUBLE double getDouble()
DATE java.sql.Date getDate()
TIME java.sql.Time getTime()
TIMESTAMP java.sql.Timestamp getTimestamp()
BLOB java.sql.Blob getBlob()

Wenn Sie die Datenbankressourcen in Ihrem Java-Programm nicht mehr benötigen, sollten Sie sie nacheinander mit Hilfe ihrer close()-Methoden schließen – zuerst das ResultSet, dann das Statement:

rs.close();
st.close();

Ein zusammenhängendes Beispiel für die JDBC-Programmierung finden Sie übrigens in Kapitel 15, XML. Ein weiteres Beispiel für eine Datenbankschnittstelle befindet sich in Kapitel 18, Serverseitig dynamische Websites, wo die MySQL-Datenbankanbindung der Web-Programmiersprache PHP erläutert wird.






  

Einstieg in PHP 5

Einstieg in Java

C von A bis Z

Einstieg in C++

Einstieg in Linux

Einstieg in XML

Apache 2




Copyright © Galileo Press GmbH 2004
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de