Informatik Verbund Stuttgart der Universität Stuttgart Tutorium Java Anbindung von Datenbanken mit JDBC (kopetzky@ike.uni-stuttgart.de)
Übersicht Relationale Datenbanken SQL - Structured Query Language JDBC - Java Datenbank Schnittstelle Beispielanwendung
Warum Datenbanken?... kaum eine größere Informatikanwendung ist ohne DB-Unterstützung denkbar. DB-Systeme... sind heute ein selbstverständliches Hilfsmittel der betrieblichen Organisation und Verwaltung geworden. Datenbanken... als Schlüsseltechnologie für die effiziente Realisierung komplexer Informationssysteme...
Kennzeichen der Daten lange Lebensdauer (Jahre, Jahrzehnte) reguläre Strukturen große Datenobjekte, große Datenmengen stetig anwachsende integrierte Bestände (Giga-, Terabyte an Informationen) immer wiederkehrende Muster von Objektbeziehungen
Vorteile einer Datenbank Datenhaltung und Zugriff auf die Daten unabhängig von der Anwendung Datensharing: Gleichzeitiger Zugriff mehrerer Benutzer bzw. Anwendungen unter Wahrung der Datenkonsistenz Software-Qualität: Definierte Schnittstellen, Modularisierung von Anwendercode und Datenzugriffscode Beliebige Verteilung von Programmen und Datenhaltung Skalierbarkeit der Datenbankleistungsfähigkeit Gewährleistung der Datensicherheit
Bestandteile einer Datenbank Datenbankverwaltungssystem Datenbanksprache Formulareditor Berichtseditor Menüeditor
Relationales Datenbankmodell exakte Beschreibung des Datenbankschemas Ablage von Daten in Form von Tabellen Beziehungen zwischen Tabellen Ziele: Redundanz (mehrfaches Speichern gleicher Informationen) verhindern Datenkonsistenz (Eindeutigkeit der Daten) gewährleisten
Tabellen Tabellenname Teilnehmer TNummer Vorname Name Mail 1002 Kai Müller kai@mueller.de 1003 Emil Wutz emil@gmx.de 1011 Gerda Pfau pfau@t-online.de 1022 Karl Marx karl@marx.de 1023 Friedrich Marx friedrich@marx.de 1033 Susanne Marx susanne@marx.de Feldname Datensatz Wertebereich 1045 Erwin Ecke ecke@t-online.de Feldinhalt
Assoziationstypen Assoziationstyp einfache Assoziation konditionelle Assoziation multiple Assoziation multiple-konditionelle Assoziation Abkürzung 1 c m mc Datensatzanzahl in Tabelle 2 genau ein Datensatz (1) kein oder genau ein Datensatz (0/1) mindestens ein Datensatz (>=1) beliebig viele Datensätze (>=0)
Kombination der Assoziationstypen Beziehung = Assoziation + Gegenassoziation Vier Assoziationstypen => max. 16 Beziehungstypen 1 c m mc 1 1-1 c-1 m-1 mc-1 hierarchische Beziehungen c 1-c c-c m-c mc-c konditionelle Beziehungen m 1-m c-m m-m mc-m netzwerkförmige Beziehungen mc 1-mc c-mc m-mc mc-mc
Primär- und Fremdschlüssel Ein Primärschlüssel (primary key)...... muß eindeutig sein... muß in jedem Datensatz vorhanden sein Ein Fremdschlüssel (foreign key)...... muß als Primärschlüssel in Tabelle 2 existieren... darf nicht leer sein... kann unterschiedliche Feldnamen haben
Beispiel konditionelle Assoziation 1 - c Teilnehmer TNummer Vorname Name 1002 Kai Müller 1003 Emil Wutz Bankverbindung TNummer BLZ KtoNr 1002 60050101 1815 1011 70010001 7878 1011 Gerda Pfau allgemeine Teilnehmerdaten spezielleteilnehmerdaten
Beispiel multiple Assoziation mc - mc Teilnehmer TNummer Vorname Name 1002 Kai Müller 1003 Emil Wutz Kurs KNummer Titel Gebühr 122 JDBC 50 213 JavaBeans 150 1 - mc 1 - mc Teilnehmer_Kurs TNummer KNummer 1002 122 1003 122 1002 213
Kochrezept Datenbank Bestimme den Zweck Lege die Tabellen fest Definiere Primär- und Fremdschlüssel Vereinbare die Beziehungen Erstelle die Tabellen Erzeuge Beispieldatensätze und teste
SQL - Structured Query Language Standardsprache für relationale Datenbanken (ANSI) Ermöglicht Kommunizieren mit dem Datenbanksystem Ermöglicht Abfragen, Manipulieren und Sichern von Daten Viele Hersteller haben Sprachumfang individuell erweitert (... natürlich... )
SQL Anweisungen (Datendefinition) Anweisung für Tabellen erstellen Tabellen ändern Tabellen indizieren Anweisung CREATE TABLE ALTER TABLE CREATE UNIQUE INDEX CREATE TABLE Teilnehmer ( TNummer LONG, Vorname CHAR(30), Name CHAR(30) NOT NULL, Mail CHAR(50), CONSTRAINT Const1 PRIMARY KEY (TNumber) );
SQL Anweisungen (Datenmanipulation) Anweisung für Datensätze einfügen Datensätze ändern Datensätze löschen Anweisung INSERT INTO UPDATE DELETE FROM INSERT INTO Teilnehmer (TNummer, Vorname, Name, Mail) VALUES(1002, Kai, Müller, kai@mueller.de ); INSERT INTO Teilnehmer (TNummer, Name) VALUES(1003, Wutz );
SQL Anweisungen (Datenabfrage-1) Anweisung für Einfache Abfragen Abfrage mit Bedingungen Datensätze sortieren Datensätze gruppieren verknüpfte Abfragen Tabellen vereinigen Unterabfragen Speichern der Abfragen Anweisung SELECT...... WHERE...... ORDER BY...... GROUP BY... HAVING...... UNION... DELETE FROM
SQL Anweisungen (Datenabfrage-2) SELECT * FROM Teilnehmer; TNummer Vorname Name Mail 1002 Kai Müller kai@mueller.de 1003 Emil Wutz emil@gmx.de 1011 Gerda Pfau pfau@t-online.de 1022 Karl Marx karl@marx.de 1023 Friedrich Marx friedrich@marx.de 1033 Susanne Marx susanne@marx.de 1045 Erwin Ecke ecke@t-online.de SELECT * FROM Teilnehmer WHERE Name= Marx ; TNummer Vorname Name Mail 1022 Karl Marx karl@marx.de 1023 Friedrich Marx friedrich@marx.de 1033 Susanne Marx susanne@marx.de
Datenbank Transaktionen Grundkonzept der Transaktionsverarbeitung: Atomare Aktionen Atomicity Transaktion wird wie eine Anweisung behandelt Consistency Datenbank ist vor und nach Transaktion konsistent Isolation Durability Zeitlich verzahnte Transaktionen werden isoliert ausgeführt Änderungen sind nach erfolgreicher Transaktion dauerhaft
2-Phasen-Commit Protokoll aktion 1 prepare Programm aktion 1 ready aktion 2 prepare Phase I aktion 2 ready Phase II commit acknowledge Datenbank
Was ist JDBC? Java API für die Ausführung von SQL Anweisungen Warenzeichen Java Database Connectivity Sammlung von Java Klassen und Schnittstellen Java Mechanismus zur Kommunikation mit unterschiedlichen Datenbanken
Was macht JDBC? Verbindungsaufbau mit Datenbank Senden von SQL Anweisungen ggf. Auswertung der Ergebnisse connect Java Programm/ Applet JDBC SELECT * FROM... ResultSet Datenbank
Wozu JDBC (und nicht ODBC)? Probleme bei Nutzung der C-Schnittstelle: Portabilität Robustheit (void*) lokale Installation nötig ODBC ist schwer zu lernen reine Java-Lösung ist automatisch installierbar portabel sicher
2-Schicht Modell (two-tier) Clientschicht (Benutzer- und Geschäftsdienste) Datenquellenschicht (Datendienste) Java Programm / Applet JDBC Datenbank
3-Schicht Modell (three-tire) Clientschicht (Benutzerdienste) mittlere Schicht (Geschäftsdienste) Datenquellenschicht (Datendienste) Java Programm / Applet Java Programm JDBC Datenbank
JDBC Architektur (1) partieller Java JDBC Treiber DB Client Bibl. Datenbank Server Java Applet/ Programm JDBC API JDBC Treiber Manager JDBC- ODBC Treiber ODBC DB Client Bibl. Datenbank Server
JDBC Architektur (2) reiner Java JDBC Treiber Datenbank Server Java Applet/ Programm JDBC API JDBC Treiber Manager reiner Java JDBC Treiber DB Middleware Datenbank Server
JDBC-ODBC Treiber JDBC Treiber einfach aber langsam zusätzliche lokale Software partieller Java JDBC Treiber zusätzliche lokale Software reiner Java JDBC Treiber DBMS abhängiges Protokoll reiner Java JDBC-Netz Treiber flexibel durch DBMS unabhängiges Protokoll für Internet-Nutzung: Sicherheit, Firewalls,...
JDBC Praxis Beispiel: Teilnehmerdatenbank mit Access Aufbau Teilnehmerdatenbank Einrichten der Datenquelle Rahmen einer Verbindung (Example 1) Einrichten der Tabellen (Example 2) Eintragen von Daten (Example 3) Auswerten von Ergebnissen (Example 4,5,6)
Aufbau Teilnehmerdatenbank mc - mc 1 - c 1 - mc mc - 1
Einrichten der Datenquelle Installation ODBC- Treiber Einrichten der ODBC- Datenquelle mydb
Vorbereitung: Rahmen einer Verbindung Laden des Datenbank Treibers: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Aufbau der Verbindung: Connection con = DriverManager.getConnection("jdbc:odbc:myDB"); Transaktionsparameter setzen: con.setautocommit(false); Nachbereitung ( Aufräumen ): Abbau der Verbindung: con.close();
Einrichten der Tabellen Vorbereitung Anlegen eines Statement -Objekts: Statement stmt = con.createstatement(); Aktionen ausführen: stmt.executeupdate( CREATE TABLE Teilnehmer.. ); stmt.executeupdate( CREATE TABLE Bankverbindung.. ); stmt.executeupdate( CREATE TABLE Kurs.. ); stmt.executeupdate( CREATE TABLE Teilnehmer_Kurs.. ); Transaktionsausführung bestätigen: con.commit(); Nachbereitung ( Aufräumen )
Eintragen von Daten Vorbereitung Anlegen eines Statement -Objekts: Statement stmt = con.createstatement(); Kurse eintragen: stmt.executeupdate( INSERT INTO Kurs.. ); Teilnehmer eintragen: stmt.executeupdate( INSERT INTO Teilnehmer.. ); stmt.executeupdate( INSERT INTO Bankverbindung.. ); Teilnehmer anmelden: stmt.executeupdate( INSERT INTO Teilnehmer_Kurs.. ); Nachbereitung ( Aufräumen )
Auswerten von Ergebnissen Vorbereitung Anlegen eines Statement -Objekts: Statement stmt = con.createstatement(); Liste aller Teilnehmer: ResultSet rs = stmt.executequery( SELECT.. ); Ausgabe der Ergebnisse: while (rs.next()) { System.out.println(rs.getString( Name )); } Nachbereitung ( Aufräumen )
DriverManager: Übersicht JDBC-Klassen Laden von Treibern Erzeugen von Datenbankverbindungen Weiterreichen von Verbindungsanforderungen DriverPropertyInfo: Informationen über den verwendeten Treiber Types: Liste von SQL-Datentypen und symbolischen Konstanten Date, Time, Timestamp: SQL-nahe Erweiterungen der Klasse java.util.date Numeric: SQL-naher numerischer Typ mit erweiterten arithmetishen Operationen
Übersicht JDBC-Schnittstellen Driver Connection Statement PreparedStatement, CallableStatement: Effizientere Ausführung vorkompilierter Statements bzw. Prozeduren ResultSet: Ergebnisse einer Datenbankabfrage ResultSetMetaData: Informationen über die Attribute eines ResultSets DataBaseMetaData: Informationen über die aktuelle Verbindung
Literatur Start mit Datenbanken und SQL, KnowWare Verlag ISBN 3-931666-19-4 Einführung in SQL, Universität Dortmund http://www.hrz.uni-dortmund.de/kurse/ JDBC 2.0 Standard Extension API, sun microsystems http://java.sun.com/products/jdbc/