Übung Datenbanksysteme I JDBC. Thorsten Papenbrock



Ähnliche Dokumente
Übung Datenbanksysteme I JDBC. Thorsten Papenbrock

Datenbanksysteme I Datenbankprogrammierung Felix Naumann

Übung Datenbanksysteme I Embedded SQL, Stored Procedures, JDBC

Datenbanksysteme I Übung: JDBC. Jana Bauckmann

Übung Datenbanksysteme I Embedded SQL, Stored Procedures, JDBC

Datenbanksysteme I Datenbankprogrammierung Felix Naumann

Prozedurale Datenbank- Anwendungsprogrammierung

Java Database Connectivity (JDBC) Walther Rathenau Gewerbeschule 1

seit Java 1.1 Bestandteil der API: packages java.sql, javax.sql

Datenbankentwurf & Datenbankzugriff mit JDBC. Georg Köster Sven Wagner-Boysen

Dynamisches SQL. Folien zum Datenbankpraktikum Wintersemester 2009/10 LMU München

Oracle: Abstrakte Datentypen:

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER

Kapitel 10. JDBC und SQLJ. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken 1

2. Datenbank-Programmierung

JDBC. Es kann z.b. eine ODBC-Treiberverbindung eingerichtet werden, damit das JAVA-Programm auf eine ACCESS-DB zugreifen kann.

Dipl. Inf. Dipl. Math. Y. Orkunoglu Datum:

Übungsblatt 8- Lösungsvorschlag

Nachtrag: Farben. Farbblindheit. (Light und Bartlein 2004)

Grundlagen von Datenbanken SS 2010 Kapitel 8: Datenbank-Einbettung in Programmiersprachen Prof. Dr. Stefan Böttcher Universität Paderborn

Universität Duisburg-Essen Informationssysteme Prof. Dr.-Ing. N. Fuhr. Praktikum Datenbanken / DB2 Woche 8: Trigger, SQL-PL

SQL für Trolle. mag.e. Dienstag, Qt-Seminar

Universität Augsburg, Institut für Informatik WS 2006/2007 Dr. W.-T. Balke 27. Nov M. Endres, A. Huhn, T. Preisinger Lösungsblatt 5

Gesicherte Prozeduren

Universität Stuttgart Abteilung Anwendersoftware Steht für Embedded SQL in Java. - Java-Methoden als SQL Stored-Procedures

Java: MySQL-Anbindung mit JDBC.

SQLJ. Standardisierte Java-DB. DB-Schnittstelle. Spezifikationen. Oracle, IBM, Informix, Sybase,, Tandem, Sun, Microsoft stehen dahinter

Folgendes PL/SQL Codefragment zeigt das grundlegende Statement für diesen Test: Java.

Verteidigung gegen SQL Injection Attacks

Willkommen. Datenbanken und Anbindung

Wie kommen die Befehle zum DBMS

Grundlagen der Informatik 2

3. Stored Procedures und PL/SQL

vs. Fehler zur Übersetzungszeit

Referenzielle Integrität SQL

Übung 7 DBMS-FUNKTIONALITÄTEN UND DATENIMPORT

Datenbankzugriff mit JDBC

Übersicht über Datenbanken

Wie kommen die Befehle zum DBMS

Softwareentwicklung mit JAVA EE

Java Application 1 Java Application 2. JDBC DriverManager. JDBC-ODBC Br idge. ODBC Driver Manager. Dr iver C. Dr iver D.

IV. Datenbankmanagement

Datenmanagement in Android-Apps. 16. Mai 2013

WS 2010/11 Datenbanksysteme Fr 15:15 16:45 R Vorlesung #6. SQL (Teil 4)

1a) SQL Stored Procedure via IDs

Whitepaper. Produkt: combit Relationship Manager. Datensatzhistorie mit dem SQL Server 2000 und combit GmbH Untere Laube Konstanz

5.3 Datenänderung/-zugriff mit SQL (DML)

Webbasierte Informationssysteme

Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin

Mengenvergleiche: Alle Konten außer das, mit dem größten Saldo.

Datenbank und Informationssysteme

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick Parameterübergabe...

Ein Ausflug zu ACCESS

SQL (Structured Query Language) Schemata Datentypen

Hochschule Karlsruhe Technik und Wirtschaft Anhänge: Fakultät für Informatik und Wirtschaftsinformatik SS 2013 Prof. Schmidt.

Datenbanksysteme 2 Frühjahr-/Sommersemester Mai 2014

OPERATIONEN AUF EINER DATENBANK

LINQ to SQL. Proseminar Objektorientiertes Programmieren mit.net und C# Christoph Knüttel. Institut für Informatik Software & Systems Engineering

Beispiel: DB-Mock (1/7)

6. Datenintegrität. Integritätsbedingungen

ORM & OLAP. Object-oriented Enterprise Application Programming Model for In-Memory Databases. Sebastian Oergel

PHP Kurs Online Kurs Analysten Programmierer Web PHP

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

JDBC. Allgemeines ODBC. java.sql. Beispiele

Interaktive Webseiten mit PHP und MySQL

Kapitel DB:VI (Fortsetzung)

11 Anwendungsprogrammierung

Labor 3 - Datenbank mit MySQL

Kapitel 9. Embedded SQL. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken 1

Datenbanksysteme. Programmieren von Datenbankzugriffen mit JDBC. Burkhardt Renz. Fachbereich MNI Technische Hochschule Mittelhessen

Projektbericht Gruppe 12. Datenbanksysteme WS 05/ 06. Gruppe 12. Martin Tintel Tatjana Triebl. Seite 1 von 11

Datumsangaben, enthält mindestens Jahr, Monat, Tag

SQL: statische Integrität

SQL und MySQL. Kristian Köhntopp

Entwicklungsumgebung für die Laborübung

Funktionen. Überblick über Stored Functions. Syntax zum Schreiben einer Funktion. Schreiben einer Funktion

Whitepaper. Produkt: combit Relationship Manager / address manager. Integration der Ansicht "Adressen" in eigene Solution

PHP und MySQL. Integration von MySQL in PHP. Zellescher Weg 12 Willers-Bau A109 Tel Michael Kluge (michael.kluge@tu-dresden.

DB2 SQL, der Systemkatalog & Aktive Datenbanken

Referentielle Integrität

desk.modul : WaWi- Export

DB-Programmierung. Lehr- und Forschungseinheit Datenbanken und Informationssysteme 1. Ziele. DB2 Zugriff mit Java selbst programmieren

Upgrade-Leitfaden. Apparo Fast Edit 1 / 7

Referentielle Integrität

Lehrveranstaltung Grundlagen von Datenbanken

SQL. SQL: Structured Query Language. Früherer Name: SEQUEL. Standardisierte Anfragesprache für relationale DBMS: SQL-89, SQL-92, SQL-99

Datenbanksysteme I. Klausur zum Praktikum. Mehrere Professoren prüfen mit genau einem Beisitzer genau einen Studenten.

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Lehrstuhl Informatik VI Grundzüge der Informatik * WS 2008/2009 Prof. Dr. Joachim Biskup

4D Server v12 64-bit Version BETA VERSION

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Datenintegrität. Einschränkung der möglichen Datenbankzustände und -übergänge auf die in der Realität möglichen

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 17: 3-Schichten-Architektur 2

XAMPP-Systeme. Teil 3: My SQL. PGP II/05 MySQL

3 Embedded SQL. 3.1 Theorie Was ist Embedded SQL?

DB2 Kurzeinführung (Windows)

Einführung in die Informatik II

HaskellDB. Datenbank-Features in Haskell Johannes Reiher

Praktikum Datenbanksysteme

Transkript:

Übung Datenbanksysteme I JDBC Thorsten Papenbrock

Motivation: Grenzen von SQL 2 1. Bedingte Anweisungen Erhöhe das Gehalt eines Arbeitsnehmers um 2%, falls er eine Belobigung erhalten hat 2. Darstellung von Daten (z.b. Web-Anwendungen) Erstelle eine übersichtliche und schöne Repräsentation für eine Menge von Produkt-Tupeln 3. Komplizierte Fragestellungen (z.b. Duplikaterkennung) Finde alle Kunden-Tupel, die sich sehr ähnlich sind 4. String-Operationen (z.b. String-Splitting) Teile das Attribut Name auf in die Attribute Vor-, Mittel- und Nachname und weise den neuen Attributen anschließend passende Typen zu

Motivation: SQL und Programmiersprachen 3 Embedded SQL Kombiniert SQL mit Programmiersprachen ADA, C, C++, Cobol, Fortran, M, Pascal, PL/I, Bettet SQL beim Preprocessing in den Programmfluss ein Stored Procedures Speichern Prozeduren als DBMS Objekte in der Datenbank Können in SQL Ausdrücken aufgerufen werden Call-Level-Interface (CLI) Verbindet C mit DBMS Implementiert eine DBMS-spezifische Funktionsbibliothek Benötigt kein Preprocessing Java Database Connectivity (JDBC) Funktioniert wie CLI aber für Java

Motivation: Impedance Mismatch 4 Bisher: Generische SQL Schnittstelle Absetzen einzelner, unverknüpfter SQL-Statements Verwendung über Kommandozeile Selten genutzt ( Datenbank-Administratoren) Jetzt: SQL in Programmiersprachen Einbettung in (große) Softwarekomponenten Verwendung aus dem Quellcode heraus Ausgiebig genutzt in allen möglichen Software-Projekten Impedance Mismatch

Motivation: Impedance Mismatch 5 Impedance Mismatch = Verwendung unterschiedlicher Datenmodelle Relationales Model (DBMS) Relationen und Attribute Nebenbedingungen Deklarativ Generisches Modell (Programmiersprachen) Pointer, verschachtelte Strukturen und Objekte Schleifen und Verzweigungen i.d.r. Imperativ Datentransfer zwischen den Modellen notwendig!

Motivation: Impedance Mismatch 6 Idee 1: Nutze SQL allein, allerdings nicht alle Anweisungen ausdrückbar (z.b. nicht n! ) Ausgabe beschränkt auf Relationen (z.b. keine Graphiken) Idee 2: Nutze Programmiersprache allein, allerdings Anweisungen sind meist viel komplexer als SQL-Anfragen Abstraktion von Speicherstrukturen nicht möglich Physische Datenunabhängigkeit! DBMS sind extrem effizient Idee 3: Nutze SQL eingebettet in einer Programmiersprache Programmiersprache ( Host Language ) für komplexe Operationen Embedded SQL für effizienten Datenzugriff Explizites Mapping der gelesenen und geschriebenen Daten

Übersicht: Einbettung von SQL 7 Embedded SQL Stored Procedures OCL und JDBC

Embedded SQL: Übersetzung 8 Programmiersprache & Embedded SQL Präprozessor Programmiersprache & Funktionsaufrufe Compiler DBMS-spezifisch, d.h. Kompiliervorgang muss für jedes DBMS (und möglicherweise auch für verschiedene Versionen desselben DBMS) erneut ausge- Führt werden! Ausführbares Programm

Embedded SQL: Anfragen ohne Ergebnis 9 1. Host-Variablen deklarieren EXEC SQL BEGIN DECLARE SECTION; char studioname[50], studioadr[256]; char SQLSTATE[6]; EXEC SQL END DECLARE SECTION; 2. Anfrage ohne Ergebnis EXEC SQL INSERT INTO Studio(Name, Adresse) VALUES (:studioname, :studioadr); Hostvariablen mit Doppelpunkt Verfahren für jeden SQL-Ausdruck, der kein Ergebnis liefert: INSERT, DELETE, UPDATE, CREATE, DROP,

Embedded SQL: Anfragen ein Ergebnis-Tupel 10 1. Host-Variablen deklarieren EXEC SQL BEGIN DECLARE SECTION; char studioname[50], studioadr[256]; char SQLSTATE[6]; EXEC SQL END DECLARE SECTION; 2. Anfrage ein Ergebnis-Tupel EXEC SQL SELECT Name, Adresse INTO :studioname, :studioadr FROM Studio WHERE id = 310;

Embedded SQL: Anfragen viele Ergebnis-Tupel 11 1. Host-Variablen deklarieren EXEC SQL BEGIN DECLARE SECTION; char studioname[50], studioadr[256]; char SQLSTATE[6]; EXEC SQL END DECLARE SECTION; 2. Anfrage viele Ergebnis-Tupel

Embedded SQL: Anfragen viele Ergebnis-Tupel 12 void printgehaltsbereiche() { int i, stellen, counts[15]; EXEC SQL BEGIN DECLARE SECTION; int gehalt; char SQLSTATE[6]; EXEC SQL END DECLARE SECTION; } EXEC SQL DECLARE managercursor CURSOR FOR SELECT Gehalt FROM Manager; EXEC SQL OPEN managercursor; for (i = 0; i < 15; i++) counts[i] = 0; Tupel abrufen und Cursor weitersetzen while (1) { EXEC SQL FETCH FROM managercursor INTO :gehalt; if (strcmp(sqlstate, 02000 )) break; stellen = 1; NO DATA while ((gehalt /= 10) > 0) stellen++; if (stellen <= 14) counts[stellen]++; } Cursor schließen EXEC SQL CLOSE managercursor; for (i = 0; i < 15; i++) printf( Stellen = %d: Anzahl Manager = %d\n, i, counts[i]); Cursor deklarieren und öffnen

Übersicht: Einbettung von SQL 13 Embedded SQL Stored Procedures OCL und JDBC

Stored Procedures / PSM: Konzept und Umsetzung 14 Persistant Stored Modules (PSM): Gespeicherte Prozeduren, engl. Stored Procedures Speichern Prozeduren als Datenbankelemente Mischen SQL und Programmiersprache Können in regulären SQL Ausdrücken verwendet werden CREATE PROCEDURE <Name>(<Parameter in/out>) <Lokale Variablendeklarationen> <Body der Prozedur>; CREATE FUNCTION <Name>(<Parameter in>) RETURNS <Typ> <Lokale Variablendeklarationen> <Body der Prozedur>;

Stored Procedures / PSM: Beispiel: Mittelwert und Varianz 15 CREATE PROCEDURE MeanVar( IN studioname CHAR[15], OUT mittelwert REAL, OUT varianz REAL) DECLARE Not_Found CONDITION FOR SQLSTATE 02000 ; DECLARE FilmCursor CURSOR FOR SELECT Laenge FROM Filme WHERE StudioName = studioname; DECLARE neuelaenge INTEGER; DECLARE filmanzahl INTEGER; BEGIN SET mittelwert = 0.0; SET varianz = 0.0; SET filmanzahl = 0; OPEN FilmCursor; FilmLoop: LOOP FETCH FilmCursor INTO neuelaenge; IF Not_Found THEN LEAVE FilmLoop END IF; SET filmanzahl = filmanzahl + 1; SET mittelwert = mittelwert + neuelaenge ; SET varianz = varianz + neuelaenge * neuelaenge; END LOOP; CLOSE FilmCursor; SET mittelwert = mittelwert / filmanzahl; SET varianz = varianz / filmanzahl - mittelwert * mittelwert; END; Parameter in/out Lokale Variablendeklarationen Body der Prozedur

Stored Procedures / PSM: Externe Definition 16 Stored Procedures können externen Code verwenden Code muss dazu in bestimmtem Verzeichnis liegen Beispiel: Datenbank: DB2 Externe Sprache: Java CREATE PROCEDURE PARTS_ON_HAND( IN PARTNUM INTEGER, OUT COST DECIMAL(7,2), OUT QUANTITY INTEGER) EXTERNAL NAME 'parts.onhand' LANGUAGE JAVA PARAMETER STYLE JAVA;

Übersicht: Einbettung von SQL 17 Embedded SQL Stored Procedures OCL und JDBC

CLI und JDBC: Übersetzung 18 Programmiersprache & Embedded SQL Präprozessor Programmiersprache & Funktionsaufrufe Compiler SQL-Bibliothek (Treiber) vom DBMS-Hersteller Ausführbares Programm

CLI und JDBC: Konzept 19 DBMS-Spezifische Funktionsbibliotheken: Ermöglichen Programmieren in einer Programmiersprache (Wirtssprache) Einbettung von Datenbankanfragen in SQL Bieten spezielle Funktionen für den Datenbankzugriff Umgehen den Präprozessor Kompiliertes Ergebnis ist aber gleich! Call-Level-Interface (CLI) Verbindet C mit DBMS Adaptiert von ODBC (Open Database Connectivity) Java Database Connectivity (JDBC) Verbindet Java mit DBMS Nutzt Objektorientierung im Gegensatz zu CLI

JDBC: Überblick 20 DriverManager getconnection() Connection createstatement() preparestatement(q) Statement PreparedStatement executequery(q) setstring/set executequery() ResultSet ResultSet

JDBC: Erste Schritte 21 1. DBMS-spezifischen Treiber einbinden JDBC-Bibliothek in den Classpath einbinden 2. Verbindung zur Datenbank aufbauen String URL = "jdbc:db2://<server>:<port>/<db_name>"; String name = "<username>"; String pw = "<password>"; Connection con = DriverManager.getConnection(URL, name, pw); URL ist DBMS- und Datenbank-spezifisch URL-Pattern: "jdbc:subprotocol:datasource"

JDBC: DBMS-URLs 22 Vendor DBMS-URL DB2 Derby HSQLDB MS SQL- Server MySQL Oracle PostgreSQL jdbc:db2://{host}[:{port}]/{dbname} jdbc:derby://server[:port]/databasename[;urlattributes=value[;...]] jdbc:hsqldb[:{dbname}][:hsql://{host}[/{port}]] jdbc:microsoft:sqlserver://{host}[:{port}][;databasename={dbname}] jdbc:mysql://{host}[:{port}]/[{dbname}] jdbc:oracle:thin:@{host}:{port}:{dbname} jdbc:postgresql://[{host}[:{port}]]/{dbname}

JDBC: Überblick 23 Statement Noch ohne SQL-Anfrage Statement stmt = con.createstatement(); Prepared Statement Für häufige SQL-Anfragen PreparedStatement pstmt = con.preparestatement(<anfrage>); SQL Ausdrücke ausführen 1. ResultSet rs = stmt.executequery(<anfrage>); 2. ResultSet rs = pstmt.executequery(); 3. stmt.executeupdate(updateanfrage) 4. pstmt.executeupdate() ResultSet als Rückgabewert Ohne Rückgabewert

JDBC: Beispiele 24 Liste alle Manager-Gehälter: 1. Statement stmt = con.createstatement(); ResultSet rs = stmt.executequery("select Gehalt FROM Manager"); 2. PreparedStatement managerstmt = con.preparestatement( "SELECT Gehalt FROM Manager"); ResultSet rs = pstmt.executequery(); Füge neues Schauspieler-Tupel ein: 1. Statement stmt = con.createstatement(); stmt.executeupdate("insert INTO spielt_in VALUES(" + "'Star Wars', 1979, 'Harrison Ford'"); 2. PreparedStatement managerstmt = con.preparestatement( "INSERT INTO spielt_in VALUES(" + "'Star Wars', 1979, 'Harrison Ford'"); pstmt.executeupdate();

JDBC: Cursor - ResultSet 25 Methoden des ResultSet next() liefert nächstes Tupel liefert FALSE, falls kein weiteres Tupel vorhanden getstring(i) Liefert Wert des i-ten Attributs getint(i), getfloat(i) usw. Alternativ: getstring("<attributname>") Anwendungsbeispiel: while(gehaelter.next()){ gehalt = gehaelter.getint(1); // Operationen auf gehalt }

JDBC: Parameter 26 Definition mittels PreparedStatement Fragezeichen als Platzhalter für Parameter Bindung mittels setstring(i, v), setint(i, v) usw. Beispiel: Einfügen eines neuen Studios String studioname = "Pixar Animation Studios"; String studioadr = "Emeryville, Vereinigte Staaten"; PreparedStatement studiostmt = con.preparestatement( "INSERT INTO Studio(Name, Adresse) VALUES(?,?)"); studiostmt.setstring(1, studioname); studiostmt.setstring(2, studioadr); studiostmt.executeupdate();

JDBC: Zusammenfassung 27 1. JDBC-Bibliothek einbinden DBMS-spezifische JAR in den Classpath aufnehmen 2. Verbindung zur Datenbank aufbauen Connection über DriverManager herstellen 3. SQL-Anfragen ausführen Statements oder PreparedStatements nutzen 4. Ergebnis der SQL-Anfragen abfragen ResultSet auswerten

Exkurs 1: Foreign Keys 28 Schema: Lieferant (LieferantID, LieferantName, Adresse) Produkt (ProduktID, ProduktName, Einkaufspreis, LieferantID) Wir erlauben nur Produkte in unserer Datenbank, zu denen auch ein Lieferant existiert, und sollte ein Lieferant aussteigen, wollen wir auch dessen Produkte löschen. Wie muss der geforderte Foreign Key definiert werden? ALTER TABLE Produkt ADD CONSTRAINT ProduktFremdschlüssel FOREIGN KEY (LieferantID) REFERENCES Lieferant (LieferantID) ON DELETE CASCADE;

Exkurs 2: Trigger 29 Schema: Lieferant (LieferantID, LieferantName, Adresse) Produkt (ProduktID, ProduktName, Einkaufspreis, LieferantID) Sobald das letzte Produkt eines Lieferanten gelöscht wird, soll auch der entsprechende Lieferant gelöscht werden. Wie muss der entsprechende Trigger definiert werden? CREATE TRIGGER LöscheLieferant AFTER DELETE ON Produkt REFERENCING OLD AS gelöschtesprodukt FOR EACH ROW WHEN (0 = (SELECT COUNT(*) FROM Produkt WHERE LieferantID = gelöschtesprodukt.lieferantid)) DELETE FROM Lieferant WHERE LieferantID = gelöschtesprodukt.lieferantid;