Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe.

Ähnliche Präsentationen


Präsentation zum Thema: "Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe."—  Präsentation transkript:

1 Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe Fachbereich Informatik Moltkestraße Karlsruhe

2 Prof. K. Gremminger Folie 2 Vorlesung Datenbanksysteme SS 2002 u Structured Query Language2 (SQL92) u Java Database Connectivity (JDBC) u Einbettung von SQL in Java (SQLJ) u Structured Query Language3 (SQL99) Inhalt

3 Prof. K. Gremminger Folie 3 Vorlesung Datenbanksysteme SS 2002 Historie u SEQUEL als Anfragesprache des Prototyps System R der Firma IBM (Structured English Query Language) u 1981: SQL/Data System als kommerzielles System u Heute weit verbreitet IBM, Microsoft, Oracle, Sybase u Wachsende Popularität erforderte Standardisierung u 1986: ISO-SQL1 (auch SQL86 genannt) u 1989: Addendum-1 SQL89 u 1992: ISO-SQL92 (auch SQL2 genannt, ISO 9075) u 2000: SQL99 (ISO 9085)

4 Prof. K. Gremminger Folie 4 Vorlesung Datenbanksysteme SS 2002 Implementierungsmethoden u Direktes SQL Ausführen von SQL-Anweisungen von einem interaktiven Terminal aus u Modulsprache Beschreibung von SQL-Anweisungen in reinem SQL in Form getrennt übersetztem Modul u Call Language Interface (CLI) Aufruf von SQL-Anweisungen der SQL-Implementierung, welche wiederum das DBS mittels dynamischem SQL aufrufen u Embedded SQL Einbettung von SQL-Anweisungen in Hostsprache mit Vorübersetzung (Pre-Compiler)

5 Prof. K. Gremminger Folie 5 Vorlesung Datenbanksysteme SS 2002 Structured Query Language2 (SQL92) u Bestandteile der Sprache u Datendefinition (DDL) u Datenmanipulation (DML) u Datenkontrolle (DCL) u Die weiteren Ausführungen basieren auf SQL92. Neu: u Zusätzliche Datentypen u Auf-/Abbau von Client-Server-Verbindungen u Unterstützung von dynamischem SQL u Scrollbare Cursor u Outer-Joins u Intersect- und Minus-Mengenoperationen

6 Prof. K. Gremminger Folie 6 Vorlesung Datenbanksysteme SS 2002 Datentypen u integer (oder auch integer4) u smallint (oder auch integer2) u numeric(p,q) u float(p) u character(n), character varying(n) oder varchar(n) u bit(n), bit varying(n) u date, time, timestamp u blob (raw), clob (binary oder character large object)

7 Prof. K. Gremminger Folie 7 Vorlesung Datenbanksysteme SS 2002 Datendefinition u Schemadefinition u Tabellendefinition u Integritätsbedingungen u Sichten

8 Prof. K. Gremminger Folie 8 Vorlesung Datenbanksysteme SS 2002 Schemadefinition u SQL-Objekte können u.a. sein Domain-, Tabellen-,View-, Rechte-, Bedingungs-Definition u Benannte Sammlung von SQL-Objekten innerhalb eines Katalogs heißt Schema u Benannte Sammlung von SQL-Schemata innerhalb einer SQL-Umgebung heißt Katalog u CREATE SCHEMA [schema-name] [AUTHORIZATION user-name] [DEFAULT CHARACTER SET character-set] [list-of-schema-objects]

9 Prof. K. Gremminger Folie 9 Vorlesung Datenbanksysteme SS 2002 Tabellendefinition u Anlegen einer neuen Tabelle: CREATE TABLE Professoren (PersNrINTEGERNOT NULL, NameVARCHAR(10)NOT NULL, RangCHAR(2)); u Hinzufügen neuer Spalten: ALTER TABLE Professoren ADD (RaumINTEGER); u Verändern des Wertebereichs einer Spalte: ALTER TABLE Professoren MODIFY (NameVARCHAR(20));

10 Prof. K. Gremminger Folie 10 Vorlesung Datenbanksysteme SS 2002 Integritätsbedingungen u Attribut-Bedingung: UNIQUE, NOT UNIQUE u Primärschlüssel-Definition CREATE TABLE Studenten (MatrNr INTEGER PRIMARY KEY...); CREATE TABLE hören (MatrNr..., VorlNr..., PRIMARY KEY(MatrNr, VorlNr)); u Fremdschlüssel-Definition gelesenVon REFERENCES Professoren ON DELETE SET NULL CONSTRAINT Ticket_fk FOREIGN KEY(Nation, PassNr) REF... u Check-Klausel CREATE TABLE prüfen... Note NUMBER(2,1) CHECK(Note BETWEEN 0.7 AND 5.0),

11 Prof. K. Gremminger Folie 11 Vorlesung Datenbanksysteme SS 2002 Sichten u Virtuelle Tabellen u Berechnung der Tupel zur Laufzeit u Zur Anpassung an spezielle Benutzerbedürfnisse und zum Datenschutz u Zum Verbergen von komplexen Datenstrukturen (z.B. Primär-Fremdschlüssel-Beziehungen) u Beispiel: u CREATE VIEW Prüfungen AS SELECTMatrNr, VorlNr, PersNr FROMprüfen; u SELECT* FROMPrüfungen;

12 Prof. K. Gremminger Folie 12 Vorlesung Datenbanksysteme SS 2002 Datenmanipulation u Einfügen von Zeilen: INSERT INTO Professoren VALUES(1,Gremminger,C3,309); INSERT INTO Professoren (Name, PersNr) VALUES (Gmeiner,2); u Verändern von Zeilen: UPDATE Professoren SET Rang = C3 WHERE Name = Gremminger; u Löschen von Zeilen: DELETE FROM Vorlesungen; DELETE FROM Vorlesungen WHERE gelesenVon = 1;

13 Prof. K. Gremminger Folie 13 Vorlesung Datenbanksysteme SS 2002 Die SELECT-Anweisung u Erstellt eine Ergebnismenge in Form einer Tabelle Select[All | Distinct] {(Pseudo-) Spaltenliste | *} [Spaltenalias] FromTabellenliste [Tabellenalias] [WhereBedingungen auf Zeilen] [Group ByGruppen] [HavingBedingungen auf Gruppen] [{Union | Intersect | Minus} Abfrage] [Order BySortierspalten] u Abarbeitung u Bilde das kartesische Produkt der Tabellen in der From-Klausel u Wähle hieraus die Spalten der Tupel aus, die in der Select-Klausel aufgeführt sind

14 Prof. K. Gremminger Folie 14 Vorlesung Datenbanksysteme SS 2002 Operatoren und (Aggregat-) Funktionen u Arithmetische Operatoren: +,-,*./ u Zeichenketten-Operatoren: || u Funktionen u to_number, to_char, to_date u nvl, decode u count, distinct, max, min, sum, avg u Beispiele: u SELECTNation || PassNr FROMFlugGast; u SELECTCOUNT(DISTINCT name) FROMStadt;

15 Prof. K. Gremminger Folie 15 Vorlesung Datenbanksysteme SS 2002 WHERE-Klausel u Auswahlbedingungen auf Zeilen u Vergleichsoperatoren u =,<>,>,,>=,<= u LIKE u BETWEEN u AND u [NOT] IN u IS [NOT] NULL u Beispiele: u... WHERE FlzTypus = 747 OR Hersteller LIKE B% u... WHERE FlugGes IN (LH, BA,TA);

16 Prof. K. Gremminger Folie 16 Vorlesung Datenbanksysteme SS 2002 ORDER BY-Klausel u Geordnete Anzeige der Anfrageergebnisse u Beispiele: u SELECTPLZ, Name, Einwohner FROMStadt ORDER BYPLZ ASC; u SELECTSemester, Name, Anschrift FROMStudent ORDER BYSemester DESC, Name ASC;

17 Prof. K. Gremminger Folie 17 Vorlesung Datenbanksysteme SS 2002 GROUP BY-Klausel u Zusammenfassung von Tupeln, welche in einer ausgewählten Attributkombination den gleichen Wert aufweisen. u Dieser Wert erscheint in der Basistabelle in mehreren Zeilen, in der gruppierten Ergebnistabelle nur noch einmal. u In der SELECT-Klausel darf projeziert werden auf u Attribute, auf die gruppiert wird u Gruppenfunktionen, angewendet auf andere Attribute der Basistabelle u Konstante u Beispiel: SELECTgelesenVon, SUM( SWS ) FROMVorlesungen GROUP BYgelesenVon;

18 Prof. K. Gremminger Folie 18 Vorlesung Datenbanksysteme SS 2002 HAVING-Klausel u Ähnlich der WHERE-Klausel können an die mit GROUP BY gebildeten Gruppen zusätzliche Bedingungen gestellt werden u Beipiele: u SELECTgelesenVon, SUM( SWS) FROMVorlesungen GROUP BYgelesenVon HAVINGAVG( SWS ) > 3; u SELECTName, SUM( SWS) FROMVorlesungen, Professoren WHEREgelesenVon = PersNr GROUP BYName HAVINGAVG( SWS ) > 3;

19 Prof. K. Gremminger Folie 19 Vorlesung Datenbanksysteme SS 2002 Geschachtelte Abfragen (subqueries) u Bisher: Festlegung der WHERE-Klausel mit einer (Menge von) Konstanten u Zu welchen Flugcoupons gibt es keine Flugtickets? u SELECTAusstGes, AusstNr FROMFlCoupon; u SELECTAusstGes, AusstNr FROMFlTicket WHEREAusstGes <>... AND AusstNr <>... ; u Jetzt: Definition einer kompletten SQL-Anfrage mit Rückgabe der Ergebnismenge als Vergleichswerte an die äußere WHERE-Klausel

20 Prof. K. Gremminger Folie 20 Vorlesung Datenbanksysteme SS 2002 Geschachtelte Abfragen (Forts.) u Beispiele: u SELECTAusstGes, AusstNr FROMFlTicket WHERE (AusstGes, AusstNr) NOT IN (SELECTAusstGes, AusstNr FROMFlCoupon); u SELECTName FROMProfessoren WHERE PersNr NOT IN (SELECTgelesenVon FROMVorlesungen);

21 Prof. K. Gremminger Folie 21 Vorlesung Datenbanksysteme SS 2002 Der Existenzquantor EXISTS u Liefert TRUE, wenn eine Unterabfrage keine leere Ergebnismenge zurückgibt, sonst FALSE u Beispiel: Professoren, die keine Vorlesungen halten SELECTName FROMProfessoren WHERE NOT EXISTS (SELECT* FROMVorlesungen WHEREgelesenVon = PersNr );

22 Prof. K. Gremminger Folie 22 Vorlesung Datenbanksysteme SS 2002 Mengen-Operationen u Verknüpfung der Ergebnisse von SELECT-Anfragen u Operationen: INTERSECT, UNION, MINUS u Beispiel: Flugplätze, auf denen Flüge starten und landen SELECTAbFlPlatz FROMFlStrecke WHEREAbFlPlatz IS NOT NULL INTERSECT SELECTAnFlPlatz FROMFlStrecke WHEREAnFlPlatz IS NOT NULL;

23 Prof. K. Gremminger Folie 23 Vorlesung Datenbanksysteme SS 2002 Verbindung mehrerer Tabellen (JOIN) u Grundlage: Primär-Fremdschlüssel-Beziehungen u CROSS, NATURAL, INNER, LEFT OUTER, RIGHT OUTER, FULL OUTER, UNION-JOIN u Beispiele: u SELECTG.FlugGes Kürzel, Name Gesellschaft, AbFlPlatz Start, AnFlPlatz Ziel FROMFlGes G INNER JOIN FlStrecke S ON G.FlugGes = S. FlugGes; u SELECTP.PersNr, P.Name, V.Titel FROMProfessoren P LEFT OUTER JOIN Vorlesung V ON P.PersNr = V.gelesenVon;

24 Prof. K. Gremminger Folie 24 Vorlesung Datenbanksysteme SS 2002 Rechte u Regeln den Zugang (Authentifizierung) und den Zugriff auf die Objekte in der Datenbank (Autorisierung) u Beispiele: u GRANT CONNECT, RESOURCE TOEmil IDENTIFIED BY lime; u GRANT SELECT ONFlCoupon, FlGast TOMax, Moritz: u REVOKEUPDATE( Preis ) ONFlTicket TOMax;

25 Prof. K. Gremminger Folie 25 Vorlesung Datenbanksysteme SS 2002 JavaDataBaseConnectivity (JDBC) u Allgemeine Datenbank-Zugriffsschnittstelle für SQL (aktuelle Version 2.1) u Übertragung der JAVA-Portabilität auf Datenbanken u Teil von Java 2 (JDK1.2, Package java.sql) u Basiert auf X/Open SQL CLI (und damit ODBC) u Übersichtlicher und einfacher benutzbar als ODBC u Unterstützt ANSI SQL92-Basisfunktionalität u Erlaubt dynamische SQL-Anweisungen

26 Prof. K. Gremminger Folie 26 Vorlesung Datenbanksysteme SS 2002 Beziehungen zwischen den Interfaces getConnection DriverManager Connection PreparedStatement Statement CallableStatement Datentypen: Date, Time, TimeStamp, Numeric, Java Datentypen, etc. Datentypen: Date, Time, TimeStamp, Numeric, Java Datentypen, etc. ResultSet executeQuery prepareCall prepareStatement createStatement getXXX getMoreResults executeQuery setXXX Funktionen weitere Methoden Unterklasse execute commit, rollback

27 Prof. K. Gremminger Folie 27 Vorlesung Datenbanksysteme SS 2002 Das JDBC API java.sql.DriverManager java.sql.Connection java.sql.Statement java.sql.ResultSet java.sql.SQLException java.sql.Date, java.sql.Timestamp java.sql.DatabaseMetaData, java.sql.ResultSetMetaData

28 Prof. K. Gremminger Folie 28 Vorlesung Datenbanksysteme SS 2002 Abbildung SQL- auf Java-Datentypen

29 Prof. K. Gremminger Folie 29 Vorlesung Datenbanksysteme SS 2002 Java Database Connectivity (JDBC) Java Applikation JDBC Manager JDBC Net Treiber Treiber für JDBC-ODBC Bridge Treiber für ODBC und DB Treiber A Treiber B Öffentliches Protokoll Datenbankabhängige Zugriffsprotokolle JDBC API JDBC Treiber API... JDBC Implementierungs- alternativen

30 Prof. K. Gremminger Folie 30 Vorlesung Datenbanksysteme SS 2002 JDBC-Treiber-Implementierung JDBC-ODBC-Bridge (Typ 1) Nutzen vorhandener ODBC-Treiber Wegen Binärcode keine Eignung für Web-Anwendungen Native-API-Treiber (Typ 2) Basiert auf Bibliotheken des DBMS-Herstellers Wegen Binärcode keine Eignung für Web-Anwendungen JDBC-Net-Treiber (Typ 3) Aufteilung Treiber in JDBC-Client und JDBC-Server JDBC-Client kann vollständig in Java realisiert werden Native-Protokoll-Treiber (Typ 4) Direkte Übersetzung der JDBC-Aufrufe in DBS-Aufrufe Client direkt mit Datenbankserver verbunden Nachteilig sind die i.A. proprietären DBS-Protokolle

31 Prof. K. Gremminger Folie 31 Vorlesung Datenbanksysteme SS 2002 Ablauf einer JDBC-Anwendung u Aufbau einer Verbindung zur Datenbank u Explizites Laden eines Datenbanktreibers u Automatisches Laden eines Datenbanktreibers (sql.drivers) u Verbindungsaufbau mit UserID und Passwort u Senden einer SQL-Anweisung u Erzeugung einer SQL-Anweisung u Verarbeiten der Anfrageergebnisse u Über Resultset-Objekt nach dem Cursor-Prinzip

32 Prof. K. Gremminger Folie 32 Vorlesung Datenbanksysteme SS 2002 Aufbau einer Verbindung zur Datenbank import java.net.URL; import java.sql.*; class JDBCExample { public static void main (String args[]) { try { // jdbc-odbc-bridge Treiber laden Class.forName (sun.jdbc.odbc.JdbcOdbcDriver); String url = Connection con = DriverManager.getConnection (url,userid, password);} } import java.net.URL; import java.sql.*; class JDBCExample { public static void main (String args[]) { try { // jdbc-odbc-bridge Treiber laden Class.forName (sun.jdbc.odbc.JdbcOdbcDriver); String url = Connection con = DriverManager.getConnection (url,userid, password);} }

33 Prof. K. Gremminger Folie 33 Vorlesung Datenbanksysteme SS 2002 Senden einer SQL-Anweisung // Suche eines Kunden String stmtSelect = SELECT KundenNr FROM Kunden+ WHERE Nachname = Gremminger;; // Anweisung erzeugen Statement stmt = con.createStatement( ); // Select -Anweisung ausführen resultSet rs = stmt.executeQuery( stmtSelect ); // SQL-Anweisungen ohne Resultset // Tabelle erzeugen stmt.executeUpdate( stmtcreate ); // Datensatz in Tabelle einfügen int rowcount = stmt.executeUpdate( stmtInsert) // Suche eines Kunden String stmtSelect = SELECT KundenNr FROM Kunden+ WHERE Nachname = Gremminger;; // Anweisung erzeugen Statement stmt = con.createStatement( ); // Select -Anweisung ausführen resultSet rs = stmt.executeQuery( stmtSelect ); // SQL-Anweisungen ohne Resultset // Tabelle erzeugen stmt.executeUpdate( stmtcreate ); // Datensatz in Tabelle einfügen int rowcount = stmt.executeUpdate( stmtInsert)

34 Prof. K. Gremminger Folie 34 Vorlesung Datenbanksysteme SS 2002 Verarbeiten der Anfrageergebnisse // Zeilenweiser Zugriff auf Ergebnismenge, Cursor zeigt vor 1. Zeile while (rs.next () ) { // Spaltenweiser Zugriff auf die aktuelle Zeile mittels // getXXX-Methoden und Index der Spalte oder Spaltennamen String s = rs.getString (1); double d = rs.getDouble (2); int i = rs.getInt (3); System.out.println (s + + d + + i); } // Freigabe der benutzten Ressourcen rs.close; // Zeilenweiser Zugriff auf Ergebnismenge, Cursor zeigt vor 1. Zeile while (rs.next () ) { // Spaltenweiser Zugriff auf die aktuelle Zeile mittels // getXXX-Methoden und Index der Spalte oder Spaltennamen String s = rs.getString (1); double d = rs.getDouble (2); int i = rs.getInt (3); System.out.println (s + + d + + i); } // Freigabe der benutzten Ressourcen rs.close;

35 Prof. K. Gremminger Folie 35 Vorlesung Datenbanksysteme SS 2002 Fehlerbearbeitung // Fehler werden als Ausnahmen (Exceptions) der Klasse SQLException // signalisiert try { // Aufruf von JDBC-Anweisungen, die Exception generieren } catch (SQLException exc) { System.out.println (SQLException: + exc.getMessage () ); } // Fehler werden als Ausnahmen (Exceptions) der Klasse SQLException // signalisiert try { // Aufruf von JDBC-Anweisungen, die Exception generieren } catch (SQLException exc) { System.out.println (SQLException: + exc.getMessage () ); }

36 Prof. K. Gremminger Folie 36 Vorlesung Datenbanksysteme SS 2002 Verbindungen und Transaktionen u Es sind mehrere Verbindungen zu einer oder mehreren Datenbanken möglich (con 1, con 2,... con n ) u Auswahl des Datenbankbereichs über Tripel Katalogname, Schemaname, Objektname (con.setCatalog(... )) u Transaktionssteuerung erfolgt auf aktiver Verbindung u Commit/Rollback (con.rollback( )) u AutoCommit (con.setAutoCommit( false ) u Lesetransaktion (con.setReadOnly( true )) u Isolationlevel (con.setTransactionIsolationlevel( Transaction_Serializable ))

37 Prof. K. Gremminger Folie 37 Vorlesung Datenbanksysteme SS 2002 Connection Pooling u Reduktion der Zeiten für DB-Verbindungsaufbau/-abbau u Ein Connection Pool ist ein Puffer von DB-Verbindungen u Logische und physische DB-Verbindungen Instanzen von java.sql.Connection und java.sql.PooledConnection PooledConnection pcon = datastore.getPooledConnection (); Connection con = pcon.getConnection (); con.close; u Vorteilhaft für mehrstufige Systemarchitekturen u Web-Applikation mit Servlets und JDBC u Applikationsserver für EJB

38 Prof. K. Gremminger Folie 38 Vorlesung Datenbanksysteme SS 2002 Gespeicherte Prozeduren Ausführung von in der Datenbank gespeicherten Prozeduren Form: (call ProcedureName( Par1, Par2,... ) Eingabeparameter müssen vor Ausführung der Anweisung initialisiert werden Ausgabeparameter müssen vor Ausführung der Anweisung registriert werden Rückgabe der Werte mit get-Operationen: getString, getDouble, getDate, getTimestamp,...

39 Prof. K. Gremminger Folie 39 Vorlesung Datenbanksysteme SS 2002 Programmierung Stored Procedures // Anweisung zum Aufruf der Prozedur HoleKundenNr String stmtCall = (call HoleKundenNr(?,?)); // Call vorbereiten stmt = con.prepareCall( stmtCall ); // IN-Parameter setzen stmt.setString( 1, Gremminger ); // Registrieren 2. Platzhalter als OUT-Parameter stmt.RegisterOutParameter( 2, java.sql.types.INTEGER ); // Anweisung ausführen stmt.executeQuery( ); int Kundennummer = stmt.getInt( 2 ); // Anweisung zum Aufruf der Prozedur HoleKundenNr String stmtCall = (call HoleKundenNr(?,?)); // Call vorbereiten stmt = con.prepareCall( stmtCall ); // IN-Parameter setzen stmt.setString( 1, Gremminger ); // Registrieren 2. Platzhalter als OUT-Parameter stmt.RegisterOutParameter( 2, java.sql.types.INTEGER ); // Anweisung ausführen stmt.executeQuery( ); int Kundennummer = stmt.getInt( 2 );

40 Prof. K. Gremminger Folie 40 Vorlesung Datenbanksysteme SS 2002 Dynamische SQL-Anweisungen Ausführung von nicht vorübersetzten SQL- Anweisungen Die SQL-Anweisung enthält als Platzhalter das Zeichen ? Platzhalter werden mittels set-Operationen und Bezug auf eine Position gesetzt: setString, setByte, setShort, setFloat,...

41 Prof. K. Gremminger Folie 41 Vorlesung Datenbanksysteme SS 2002 Programmierung dynamischer SQL PreparedStatement stmt = null; // Such-Anweisung String stmtSelect =SELECT KundenNr, Nachname+ FROM Kunden+ WHERE Nachname = ?;; // Select-Anweisung vorbereiten stmt = con.prepareStatement( stmtSelect ); // Gesuchten Nachnamen einsetzen stmt.setString( 1, Gremminger ); // Select-Anweisung ausführen ResultSet rset = stmt.executeQuery( ); PreparedStatement stmt = null; // Such-Anweisung String stmtSelect =SELECT KundenNr, Nachname+ FROM Kunden+ WHERE Nachname = ?;; // Select-Anweisung vorbereiten stmt = con.prepareStatement( stmtSelect ); // Gesuchten Nachnamen einsetzen stmt.setString( 1, Gremminger ); // Select-Anweisung ausführen ResultSet rset = stmt.executeQuery( );

42 Prof. K. Gremminger Folie 42 Vorlesung Datenbanksysteme SS 2002 Einbettung von SQL in Java (SQLJ) u Statische SQL-Anweisungen werden in den Java- Quelltext eingebettet u SQL-Anweisungen werden zur Übersetzungszeit definiert u Einzige Variabilität sind Parameter u Übersetzung durch Präcompiler (Translator) in Aufrufe des SQLJ-Laufzeitsystems und SQLJ-Profile u SQLJ-Laufzeitsystem (Package sqlj.runtime) benutzt i.d.R. JDBC-Aufrufe u Translator führt syntaktische und semantische Überprüfungen durch

43 Prof. K. Gremminger Folie 43 Vorlesung Datenbanksysteme SS 2002 Programmierprinzip Codierung Java-Quelltext mit SQLJ Java-Quelltext Bytecode Translator Java-Compiler.sqlj.java.class SQLJ-Profil SQLJ- Laufzeitsystem JDBC SQLJ Code Java Code Java Byte Code Run Program

44 Prof. K. Gremminger Folie 44 Vorlesung Datenbanksysteme SS 2002 SQLJ-Konventionen u SQLJ-Quelltexte besitzen die Endung.sqlj u Anweisungen beginnen mit #sql und werden in geschweifte Klammern gesetzt #sql { INSERT INTO book VALUES ( , Oracle 8, 1, 3, 68.00); } u Anweisungen werden mit ; abgeschlossen u Verbindung zur Datenbank mittels JDBC- Mechanismen u Es ist eine Default-Verbindung zu definieren

45 Prof. K. Gremminger Folie 45 Vorlesung Datenbanksysteme SS 2002 Host-Variablen u In allen Embedded SQL-Lösungen u Sind Variablen der Hostsprache u Werden mit ": gekennzeichnet String findBook (String isbn) throws SQLException { String title; #sql { SELECT title INTO :title FROM book WHERE isbn = :isbn }; return title; } u Dienen der Datenkommunikation zwischen SQL und der Host-Programmiersprache (IN, OUT, INOUT) u Es sind Host-Ausdrücke erlaubt #sql price { VALUES (compute_price (:IN orderNo) ) };

46 Prof. K. Gremminger Folie 46 Vorlesung Datenbanksysteme SS 2002 Cursor-Konzept u Zugriff auf Mengen von Ergebnistupeln u In SQLJ Iteratoren u Vergleichbar Resultsets von JDBC u Spaltentypen zur Über- setzungszeit festgelegt u Arten u benannter Iterator u Positionsiterator Datenbank SQL Anwendungsprogramm Cursor Java

47 Prof. K. Gremminger Folie 47 Vorlesung Datenbanksysteme SS 2002 Namens-Iterator Spalten werden über Namen gebunden #sql public iterator PersIter (string Name, int Jahr); PersIter iter; String Name = null; int Jahr = 0; #sql iter ={SELECT Name, Jahr FROM Personen} while (iter.next()) { Name = iter.name(); Jahr = iter.Jahr(); } iter.close(); Deklaration Iterator-Variable Deklaration Iterator-Klasse Iterator-Methoden Instanziierung Iterator-Objekt Freigeben Ressourcen

48 Prof. K. Gremminger Folie 48 Vorlesung Datenbanksysteme SS 2002 Positions-Iterator Spalten werden über Position gebunden #sql public iterator PersIter (string, int); PersIter iter; String Name = null; int Jahr = 0; #sql iter ={SELECT Name, Jahr FROM Personen} while (true) { #sql {FETCH :iter INTO :Name, :Jahr}; if (iter.endFetch()) break; } iter.close(); Auslesen über Host-Variablen

49 Prof. K. Gremminger Folie 49 Vorlesung Datenbanksysteme SS 2002 Transaktionssteuerung u Basiert auf den JDBC-Mechanismen u Manuelle Kontrolle #sql { COMMIT }; u Festlegung des Zugriffsmodus #sql { SET TRANSACTION READ ONLY }; u Festlegung des Isolationlevels #sql { SET TRANSACTION READ WRITE ISOLATIONLEVEL SERIALIZABLE };

50 Prof. K. Gremminger Folie 50 Vorlesung Datenbanksysteme SS 2002 Kontexte u Verbindungskontext beschreibt Datenbankverbindung u Pro Verbindung ein Kontext-Objekt Connection con = DriverManager.getConnection (url, uid, pwd); DefaultContext ctx = new DefaultContext( con ); DefaultContext.setDefaultContext( ctx ); u Umschaltung auf Kontext DefaultContext.setDefaultContext( ctx1 ); #sql { SQL-Operations }; alternativ:#sql [ctx1] { SQL-Operation }; #sql [ctx2] { SQL-Operation }; u Ausführungskontext ctx.getExecutionContext().setQueryTimeout( 5 ); #sql [ctx] { SQL-Operation };

51 Prof. K. Gremminger Folie 51 Vorlesung Datenbanksysteme SS 2002 SQLJ-Translator u Aufgaben u Syntaktische und semantische Überprüfungen u Ersetzung SQLJ-Klauseln u Code-Generierung für Iterator-,...-Klassen u Erzeugung von Profilen u Profil enthält pro SQL-Anweisung Informationen über die SQL-Operationen, Typ und Übergaberichtung von Parametern und Ergebnisdaten u Offline- vs. Online-Prüfung u Implementierung als Kommandozeilenwerkzeug sqlj oder integriert in Java-Entwicklungsumgebung

52 Prof. K. Gremminger Folie 52 Vorlesung Datenbanksysteme SS 2002 Interoperabilität mit JDBC u Notwendig für Anwendungen, welche sowohl statisches als auch dynamisches SQL benötigen u Interoperabilität betrifft u Konvertierung Verbindungskontext/JDBC-Verbindung u Konvertierung Iterator/ResultSet u Beispiel: ResultSetIterator iter; #sql iter = { SQL-Operation }; ResultSet rs = iter.getResultSet ();

53 Prof. K. Gremminger Folie 53 Vorlesung Datenbanksysteme SS 2002 Java Stored Procedures u Entwicklungszyklus u Implementierung als Java-Klassenmethoden (static) u Installation als JAR-Datei auf DB-Server u Registrierung im DB_Server (create proc...) u Aufruf (Call oder Values) u Es sind keine GUI-Funktionen realisierbar u Es existiert eine Default-DB-Verbindung u Es ist kein Dateizugriff erlaubt u Einsatz von JDBC oder SQLJ möglich

54 Prof. K. Gremminger Folie 54 Vorlesung Datenbanksysteme SS 2002 Implementierung Java Stored Procedures public static double price {int orderno) throws SQLException { double res = 0.0; Connection con = DriverManager.getConnection (jdbc:...); PreparedStatement stmt = con.prepareStatement (SELECT SUM( b.price * oi.num)+ FROM book b, orderItem oi+ WHERE oi.orderId = ? + AND b.isbn = oi.isbn); stmt.setInt (1, orderno); ResultSet rs = stmt.executeQuery (); if (rs.next () ) res = rs.getDouble (1); stmt.close (); return res; } public static double price {int orderno) throws SQLException { double res = 0.0; Connection con = DriverManager.getConnection (jdbc:...); PreparedStatement stmt = con.prepareStatement (SELECT SUM( b.price * oi.num)+ FROM book b, orderItem oi+ WHERE oi.orderId = ? + AND b.isbn = oi.isbn); stmt.setInt (1, orderno); ResultSet rs = stmt.executeQuery (); if (rs.next () ) res = rs.getDouble (1); stmt.close (); return res; }

55 Prof. K. Gremminger Folie 55 Vorlesung Datenbanksysteme SS 2002 Installation und Registrierung auf DB-Server u Übersetzung ggf. mit SQLJ-Translator > javac –d routines.java u Erzeugung einer JAR-Datei > jar cf routines.jar routines.class u Registrierung > CALL sqlj.install_jar (file:~/routines.jar, routines_jar, deploy); u Beispiel: CREATE FUNCTION price (orderNo INTEGER) RETURNS FLOAT MODIFIES SQL DATA EXTERNAL NAME routines_jar:routines.price LANGUAGE JAVA PARAMETER STYLE JAVA;

56 Prof. K. Gremminger Folie 56 Vorlesung Datenbanksysteme SS 2002 Beispiel aus Flugbuchungssystem (FBS) Hauptprogramm SQL-Schnittstelle Ergebnis Pre-Compiler Programmiersprache Java

57 Prof. K. Gremminger Folie 57 Vorlesung Datenbanksysteme SS 2002 SQLJ vs. JDBC SQLJ knapp und bündig bettet statisches SQL in Java ein #sql {INSERT INTO Angestellte VALUES(:n) }; JDBC flexibel performant bettet dynamisches SQL in Java ein Statement stmt = con.prepareStatement (INSERT INTO Angestellte VALUES (?)); stmt.setInt(1,n); stmt.execute;

58 Prof. K. Gremminger Folie 58 Vorlesung Datenbanksysteme SS 2002 u Funktionale Erweiterungen des relationalen Datenmodells u Integration von objektorientierten Konzepten zur Datenmodellierung in das relationale Datenmodell u Große Objekte (Large Object, LOB): Größe bis einige GBs u Geschachtelte Relationen: direkte Aufnahme von Wiederholungsgruppen u Typdeklarationen (User Defined Types, UDT): anwendungsspez. Typen u Referenzen: Erweiterung des Fremdschlüssel-Konzeptes u Pfadausdrücke: ergeben sich wegen Referenzattribute u Objektidentität: i.Ggs. zu relationalen Primärschlüsseln u Operationen: Realisierung direkt in SQL oder extern in einer prozeduralen Programmiersprache u Vererbung: realisiert Generalisierung und Spezialisierung u Die SQL99-Standardisierung definiert ein standardisiertes objekt- relationales Datenmodell u Achtung: heutige relationale DBS benutzen oft uneinheitliche Syntax Structured Query Language3 (SQL99)

59 Prof. K. Gremminger Folie 59 Vorlesung Datenbanksysteme SS 2002 LOBs u RDBMS speichern mittlerweile auch frühere Dateien wie Fotografien, Audiodaten, Videosequenzen, Textdokumente etc. u Für die Speicherung solcher Daten werden Large Objects (LOBs) standardisiert u CLOB u Character Large Object zur Speicherung langer Texte (z.B. Lebenslauf) u Spezielle Zugriffsunterstützung u BLOB u Binary Large Objects zur Speicherung/Archivierung nicht zu interpretierender Daten (z.B. Passfoto (2MB)) u NCLOB u National Clob (deshalb wie Clobs) u allerdings zur Speicherung von Texten mit Sonderzeichen (z.B. Unicode)

60 Prof. K. Gremminger Folie 60 Vorlesung Datenbanksysteme SS 2002 Einfache Benutzer-definierte Datentypen u Mit vordefinierten Datentypen lassen sich i.d.R. nicht alle anwendungsspezifischen Anforderungen abdecken u Distinct Types basieren auf einem im Datenmodell eingebauten Typ u Verhindern, dass Attributwerte semantisch falsch verwendet werden create final type NotenTyp as decimal(3,2) with comparisons; create table prüfen( MatrNrint, VorlNrint, PersNrint, NoteNotenTyp); insert into prüfen values( 4711, 2, 12345, NotenTyp( 1.00 ) ); create function NotenDurchschnitt( NotenTyp ) returns NotenTyp source avg( decimal() );

61 Prof. K. Gremminger Folie 61 Vorlesung Datenbanksysteme SS 2002 Benutzerdefinierte strukturierte Objekttypen create or replace type VorlesungenTyp; create or replace type VorlRefListenTyp as table of ref VorlesungenTyp; create or replace type VorlesungenTyp as object( VorlNrnumber, Titelvarchar(20), SWSnumber, gelesenVonref ProfessorenTyp, Voraussetzungen VorlRefListenTyp, member function DurchfallQuote return number, member function AnzHörer return int ); 4711VIS2 0815DBS4 VorlNrTitelSWSgelesenVonVoraussetzungen Vorlesungen

62 Prof. K. Gremminger Folie 62 Vorlesung Datenbanksysteme SS 2002 Benutzerdefinierte strukturierte Objekttypen (Forts.) create table Vorlesungen of VorlesungenTyp nested table Voraussetzungen store as Vorgaenger; insert into Vorlesungen select 0815, DBS, 4, ref(p), VorlRefListenTyp() from Professoren p where name = Gremminger; insert into Vorlesungen select 4711, VIS, 2, ref(p), VorlRefListenTyp() from Professoren p where name = Gremminger; /* Die Vorlesung VIS baut auf DBS auf */ insert into table (select nachf.Voraussetzungen from Vorlesungen nachf where nachf.titel = VIS) select ref(vorg) from Vorlesungen vorg where vorg.titel = DBS

63 Prof. K. Gremminger Folie 63 Vorlesung Datenbanksysteme SS 2002 Geschachtelte Objekt-Relationen u Schachtelung von Objekten (nicht nur Referenzen) in einem Objekt u Bietet sich bei schwachen Entitätstypen/Kompositionen an MatrNrNameSemesterhört absolviertePrüfungen Studenten InhaltPrüferNoteDatum Max B Moritz

64 Prof. K. Gremminger Folie 64 Vorlesung Datenbanksysteme SS 2002 Geschachtelte Objekt-Relationen (Forts.) create or replace type PrüfungenTyp as object ( Inhaltref VorlesungenTyp, Prüferref ProfessorenTyp, NoteNotenTyp, Datumdate, member function verschieben(neuerTermin date) return date ); create or replace type PrüfungsListenTyp as table of PrüfungenTyp; create or replace type StudentenTyp as object( MatrNrnumber, Namevarchar(20), Semesternumber, hörtVorlRefListenTyp, absolviertePrüfungen PrüfungslistenTyp, member function Notenschnitt return number, member function SummeWochenstunden return number );

65 Prof. K. Gremminger Folie 65 Vorlesung Datenbanksysteme SS 2002 Geschachtelte Objekt-Relationen (Forts.) create table Studenten of StudentenTyp (MatrNr primary key) nested table hört store as Belegung, nested table absolviertePrüfungen store as Examen; insert into Studenten values (12345, Max, 4, VorlRefListenTyp(), PrüpfungsListenTyp());) insert into Studenten values (23456, Moritz, 3, VorlRefListenTyp(), PrüpfungsListenTyp());) insert into table (select s.absolviertePrüfungen from Studenten s where s.Name = Moritz) values ((select ref(v)from Vorlesungen v where v.Titel = DBS), (select ref(p)from Professoren p where p.Name = Gremminger), 1.0, Sysdate);

66 Prof. K. Gremminger Folie 66 Vorlesung Datenbanksysteme SS 2002 Geschachtelte Objekt-Relationen (Forts.) /* Implementierung von Member-Funktionen */ create or replace type body StudentenTyp as member function SummeWochenstunden return number is i integer; vorlVorlesungenTyp; total number := 0; begin for i in 1..self.hört.count loop UTL_REF.SELECT_OBJECT(hört(i),vorl); total := total+vorl.SWS; end loop; return total; end;... end; /* Aufruf von Member-Funktionen */ select s.Name, s.SummeWochenstunden() from Studenten s; /* Ausgabe einer geschachtelten Relation */ select s.Name, p.Prüfer.Name, p.Inhalt.Titel, p.Note from Studenten s, table(s.absolviertePrüfungen) p;

67 Prof. K. Gremminger Folie 67 Vorlesung Datenbanksysteme SS 2002 (Einfache) Vererbung von SQL-Objekttypen create type AngestelltenTyp as (PersNrint, Namevarchar(20)) instantiable; create type ProfessorenTyp under AngestelltenTyp (Rangchar(2), Raumint); alter type ProfessorenTyp add method anzMitarbeiter() returns int language SQL contains SQL reads SQL data; create table Angestellten of AngestelltenTyp; create table Professoren of ProfessorenTyp under Angestellten inherit select privileges;

68 Prof. K. Gremminger Folie 68 Vorlesung Datenbanksysteme SS 2002 (Einfache) Vererbung von SQL-Objekttypen (Forts.) create method anzMitarbeiter() for ProfessorenTyp return (select count(*) from Assistenten where Boss->PersNr = self..PersNr); insert into Professoren values (4711, Gremminger, C3, 310); /* Ausgabe aller Professoren und Assistenten */ select a.Name, a.PersNr from Angestellten a; Selecta.Name, a.Boss->Name as Chef, a.Boss->anzMitarbeiter as anzJünger From Assistenten a;

69 Prof. K. Gremminger Folie 69 Vorlesung Datenbanksysteme SS 2002 Komplexe Attributtypen create type NotenTyp as (NumWertdecimal(3,2), Landvarchar(20), StringWertvarchar(20)); create type US_NotenTyp under NotenTyp as (WithHonourschar(1)); create table Leistungen ( Teilnehmervarchar(20), Lehrveranstaltungvarchar(20), NoteNotenTyp); insert into Leistungen values (Egon, Java, US_NotenTyp()..Land(USA)..NumWert(4.0)..StringWert(excellent)..withHonours(y)); select Teilnehmer, Lehrveranstaltung, Note..Land, Note..NumWert from Leistungen;


Herunterladen ppt "Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Sprachschnittstellen von Datenbanksystemen Prof. Klaus Gremminger Fachhochschule Karlsruhe."

Ähnliche Präsentationen


Google-Anzeigen