Upload
diedrich-achorn
View
110
Download
2
Embed Size (px)
Citation preview
Prof. K. Gremminger Folie 1Vorlesung Datenbanksysteme SS 2002
Sprachschnittstellenvon
Datenbanksystemen
Prof. Klaus GremmingerFachhochschule Karlsruhe
Fachbereich InformatikMoltkestraße 3076133 Karlsruhe
email: [email protected]
Prof. K. Gremminger Folie 2Vorlesung Datenbanksysteme SS 2002
Structured Query Language2 (SQL92) Java Database Connectivity (JDBC) Einbettung von SQL in Java (SQLJ) Structured Query Language3 (SQL99)
Inhalt
Prof. K. Gremminger Folie 3Vorlesung Datenbanksysteme SS 2002
Historie
SEQUEL als Anfragesprache des Prototyps System R der Firma IBM (Structured English Query Language)
1981: SQL/Data System als kommerzielles System Heute weit verbreitet IBM, Microsoft, Oracle, Sybase Wachsende Popularität erforderte Standardisierung 1986: ISO-SQL1 (auch SQL86 genannt)
1989: Addendum-1 SQL89 1992: ISO-SQL92 (auch SQL2 genannt, ISO 9075)
2000: SQL99 (ISO 9085)
Prof. K. Gremminger Folie 4Vorlesung Datenbanksysteme SS 2002
Implementierungsmethoden
Direktes SQLAusführen von SQL-Anweisungen von einem interaktiven Terminal aus
ModulspracheBeschreibung von SQL-Anweisungen in reinem SQL in Form getrennt übersetztem Modul
Call Language Interface (CLI)Aufruf von SQL-Anweisungen der SQL-Implementierung, welche wiederum das DBS mittels dynamischem SQL aufrufen
Embedded SQLEinbettung von SQL-Anweisungen in Hostsprache mit Vorübersetzung (Pre-Compiler)
Prof. K. Gremminger Folie 5Vorlesung Datenbanksysteme SS 2002
Structured Query Language2 (SQL92)
Bestandteile der Sprache Datendefinition (DDL) Datenmanipulation (DML) Datenkontrolle (DCL)
Die weiteren Ausführungen basieren auf SQL92. Neu: Zusätzliche Datentypen Auf-/Abbau von Client-Server-Verbindungen Unterstützung von dynamischem SQL Scrollbare Cursor Outer-Joins Intersect- und Minus-Mengenoperationen
Prof. K. Gremminger Folie 6Vorlesung Datenbanksysteme SS 2002
Datentypen
integer (oder auch integer4) smallint (oder auch integer2) numeric(p,q) float(p) character(n), character varying(n) oder varchar(n) bit(n), bit varying(n) date, time, timestamp blob (raw), clob (binary oder character large object)
Prof. K. Gremminger Folie 7Vorlesung Datenbanksysteme SS 2002
Datendefinition
Schemadefinition Tabellendefinition Integritätsbedingungen Sichten
Prof. K. Gremminger Folie 8Vorlesung Datenbanksysteme SS 2002
Schemadefinition
SQL-Objekte können u.a. seinDomain-, Tabellen-,View-, Rechte-, Bedingungs-Definition
Benannte Sammlung von SQL-Objekten innerhalb eines Katalogs heißt Schema
Benannte Sammlung von SQL-Schemata innerhalb einer SQL-Umgebung heißt Katalog
CREATE SCHEMA[schema-name][AUTHORIZATION user-name][DEFAULT CHARACTER SET character-set][list-of-schema-objects]
Prof. K. Gremminger Folie 9Vorlesung Datenbanksysteme SS 2002
Tabellendefinition
Anlegen einer neuen Tabelle:CREATE TABLE Professoren(PersNr INTEGER NOT NULL, Name VARCHAR(10) NOT NULL, Rang CHAR(2) );
Hinzufügen neuer Spalten:ALTER TABLE Professoren
ADD (Raum INTEGER); Verändern des Wertebereichs einer Spalte:
ALTER TABLE ProfessorenMODIFY (Name VARCHAR(20));
Prof. K. Gremminger Folie 10Vorlesung Datenbanksysteme SS 2002
Integritätsbedingungen Attribut-Bedingung: UNIQUE, NOT UNIQUE Primärschlüssel-Definition
CREATE TABLE Studenten(MatrNr INTEGER PRIMARY KEY...);CREATE TABLE hören(MatrNr ..., VorlNr ..., PRIMARY KEY(MatrNr, VorlNr));
Fremdschlüssel-DefinitiongelesenVon REFERENCES Professoren
ON DELETE SET NULLCONSTRAINT Ticket_fk FOREIGN KEY(Nation, PassNr) REF...
Check-KlauselCREATE TABLE prüfen... Note NUMBER(2,1) CHECK(Note BETWEEN 0.7 AND 5.0),
Prof. K. Gremminger Folie 11Vorlesung Datenbanksysteme SS 2002
Sichten
Virtuelle Tabellen Berechnung der „Tupel“ zur Laufzeit Zur Anpassung an spezielle Benutzerbedürfnisse und
zum Datenschutz Zum Verbergen von komplexen Datenstrukturen
(z.B. Primär-Fremdschlüssel-Beziehungen) Beispiel:
CREATE VIEW Prüfungen ASSELECT MatrNr, VorlNr, PersNrFROM prüfen;
SELECT *FROM Prüfungen;
Prof. K. Gremminger Folie 12Vorlesung Datenbanksysteme SS 2002
Datenmanipulation
Einfügen von Zeilen:INSERT INTO Professoren
VALUES(1,‘Gremminger‘,‘C3‘,309);INSERT INTO Professoren (Name, PersNr)
VALUES (‘Gmeiner‘,2); Verändern von Zeilen:
UPDATE ProfessorenSET Rang = ‘C3‘ WHERE Name = ‘Gremminger‘;
Löschen von Zeilen:DELETE FROM Vorlesungen;DELETE FROM Vorlesungen WHERE gelesenVon = 1;
Prof. K. Gremminger Folie 13Vorlesung Datenbanksysteme SS 2002
Die SELECT-Anweisung
Erstellt eine Ergebnismenge in Form einer TabelleSelect [All | Distinct] {(Pseudo-) Spaltenliste | *} [Spaltenalias]From Tabellenliste [Tabellenalias][Where Bedingungen auf Zeilen][Group By Gruppen][Having Bedingungen auf Gruppen][{Union | Intersect | Minus} Abfrage][Order By Sortierspalten]
Abarbeitung Bilde das kartesische Produkt der Tabellen in der From-Klausel Wähle hieraus die Spalten der Tupel aus, die in der Select-Klausel
aufgeführt sind
Prof. K. Gremminger Folie 14Vorlesung Datenbanksysteme SS 2002
Operatoren und (Aggregat-) Funktionen
Arithmetische Operatoren: +,-,*./ Zeichenketten-Operatoren: || Funktionen
to_number, to_char, to_date nvl, decode count, distinct, max, min, sum, avg
Beispiele: SELECT Nation || PassNr
FROM FlugGast; SELECT COUNT(DISTINCT name)
FROM Stadt;
Prof. K. Gremminger Folie 15Vorlesung Datenbanksysteme SS 2002
WHERE-Klausel
Auswahlbedingungen auf Zeilen Vergleichsoperatoren
=,<>,>,,>=,<= LIKE BETWEEN AND [NOT] IN IS [NOT] NULL
Beispiele: ... WHERE FlzTypus = ‘747‘ OR Hersteller LIKE ‘B%‘ ... WHERE FlugGes IN (‘LH‘, ‘BA‘,‘TA‘);
Prof. K. Gremminger Folie 16Vorlesung Datenbanksysteme SS 2002
ORDER BY-Klausel
Geordnete Anzeige der Anfrageergebnisse Beispiele:
SELECT PLZ, Name, EinwohnerFROM StadtORDER BY PLZ ASC;
SELECT Semester, Name, AnschriftFROM StudentORDER BY Semester DESC, Name ASC;
Prof. K. Gremminger Folie 17Vorlesung Datenbanksysteme SS 2002
GROUP BY-Klausel Zusammenfassung von Tupeln, welche in einer ausgewählten
Attributkombination den gleichen Wert aufweisen. Dieser Wert erscheint in der Basistabelle in mehreren Zeilen, in
der gruppierten Ergebnistabelle nur noch einmal. In der SELECT-Klausel darf projeziert werden auf
Attribute, auf die gruppiert wird Gruppenfunktionen, angewendet auf andere Attribute der
Basistabelle Konstante
Beispiel:SELECT gelesenVon, SUM( SWS )FROM VorlesungenGROUP BY gelesenVon;
Prof. K. Gremminger Folie 18Vorlesung Datenbanksysteme SS 2002
HAVING-Klausel
Ähnlich der WHERE-Klausel können an die mit GROUP BY gebildeten Gruppen zusätzliche Bedingungen gestellt werden
Beipiele: SELECT gelesenVon, SUM( SWS)
FROM VorlesungenGROUP BY gelesenVonHAVING AVG( SWS ) > 3;
SELECT Name, SUM( SWS)FROM Vorlesungen, ProfessorenWHERE gelesenVon = PersNrGROUP BY NameHAVING AVG( SWS ) > 3;
Prof. K. Gremminger Folie 19Vorlesung Datenbanksysteme SS 2002
Geschachtelte Abfragen (subqueries)
Bisher: Festlegung der WHERE-Klausel mit einer (Menge von) Konstanten
„Zu welchen Flugcoupons gibt es keine Flugtickets?“ SELECT AusstGes, AusstNr
FROM FlCoupon; SELECT AusstGes, AusstNr
FROM FlTicketWHERE AusstGes <> ... AND AusstNr <> ... ;
Jetzt: Definition einer kompletten SQL-Anfrage mit Rückgabe der Ergebnismenge als Vergleichswerte an die äußere WHERE-Klausel
Prof. K. Gremminger Folie 20Vorlesung Datenbanksysteme SS 2002
Geschachtelte Abfragen (Forts.)
Beispiele: SELECT AusstGes, AusstNr
FROM FlTicketWHERE (AusstGes, AusstNr) NOT IN
(SELECT AusstGes, AusstNr FROM FlCoupon );
SELECT NameFROM ProfessorenWHERE PersNr NOT IN
(SELECT gelesenVon FROM Vorlesungen);
Prof. K. Gremminger Folie 21Vorlesung Datenbanksysteme SS 2002
Der Existenzquantor EXISTS
Liefert TRUE, wenn eine Unterabfrage keine leere Ergebnismenge zurückgibt, sonst FALSE
Beispiel: „Professoren, die keine Vorlesungen halten“
SELECT NameFROM ProfessorenWHERE NOT EXISTS
(SELECT * FROM Vorlesungen WHERE gelesenVon = PersNr );
Prof. K. Gremminger Folie 22Vorlesung Datenbanksysteme SS 2002
Mengen-Operationen
Verknüpfung der Ergebnisse von SELECT-Anfragen Operationen: INTERSECT, UNION, MINUS Beispiel:
„Flugplätze, auf denen Flüge starten und landen“SELECT AbFlPlatzFROM FlStreckeWHERE AbFlPlatz IS NOT NULLINTERSECTSELECT AnFlPlatzFROM FlStreckeWHERE AnFlPlatz IS NOT NULL;
Prof. K. Gremminger Folie 23Vorlesung Datenbanksysteme SS 2002
Verbindung mehrerer Tabellen (JOIN)
Grundlage: Primär-Fremdschlüssel-Beziehungen CROSS, NATURAL, INNER, LEFT OUTER, RIGHT
OUTER, FULL OUTER, UNION-JOIN Beispiele:
SELECT G.FlugGes ‘Kürzel‘, Name ‘Gesellschaft‘,AbFlPlatz ‘Start‘, AnFlPlatz ‘Ziel‘
FROM FlGes G INNER JOIN FlStrecke SON G.FlugGes = S. FlugGes;
SELECT P.PersNr, P.Name, V.TitelFROM Professoren P LEFT OUTER JOIN
Vorlesung V ON P.PersNr = V.gelesenVon;
Prof. K. Gremminger Folie 24Vorlesung Datenbanksysteme SS 2002
Rechte
Regeln den Zugang (Authentifizierung) und den Zugriff auf die Objekte in der Datenbank (Autorisierung)
Beispiele: GRANT CONNECT, RESOURCE
TO EmilIDENTIFIED BY lime;
GRANT SELECTON FlCoupon, FlGastTO Max, Moritz:
REVOKE UPDATE( Preis )ON FlTicketTO Max;
Prof. K. Gremminger Folie 25Vorlesung Datenbanksysteme SS 2002
JavaDataBaseConnectivity (JDBC)
Allgemeine Datenbank-Zugriffsschnittstelle für SQL (aktuelle Version 2.1)
Übertragung der JAVA-Portabilität auf Datenbanken Teil von Java 2 (JDK1.2, Package java.sql) Basiert auf X/Open SQL CLI (und damit ODBC) Übersichtlicher und einfacher benutzbar als ODBC Unterstützt ANSI SQL92-Basisfunktionalität Erlaubt dynamische SQL-Anweisungen
Prof. K. Gremminger Folie 26Vorlesung Datenbanksysteme SS 2002
Beziehungen zwischen den Interfaces
getConnection
DriverManagerDriverManager
ConnectionConnection PreparedStatementPreparedStatement
StatementStatement
CallableStatementCallableStatement Datentypen: Date, Time, TimeStamp, Numeric, Java Datentypen, etc.
Datentypen: Date, Time, TimeStamp, Numeric, Java Datentypen, etc.
ResultSetResultSetexecuteQuery
prepareCall
prepareStatement
createStatement
getXXX
getXXX
getMoreResults
executeQuery
setXXX
Funktionen
weitere Methoden
Unterklasse
execute
commit, rollback
Prof. K. Gremminger Folie 27Vorlesung 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
Prof. K. Gremminger Folie 28Vorlesung Datenbanksysteme SS 2002
Abbildung SQL- auf Java-DatentypenSQL-Datentyp Java-Datentyp
CHAR String
VARCHAR String
LONGVARCHAR String
NUMERIC java.sql.Bignum
DECIMAL java.sql.Bignum
BIT boolean
TINYINT byte
SMALLINT short
INTEGER int
BIGINT long
REAL float
FLOAT double
DOUBLE double
BINARY byte[]
VARBINARY byte[]
LONVARBINARY byte[]
DATE java.sql.Date
TIME java.sql.Time
TIMESTAMP java.sql.Timestamp
Prof. K. Gremminger Folie 29Vorlesung Datenbanksysteme SS 2002
Java Database Connectivity (JDBC)Java Applikation
JDBC Manager
JDBC NetTreiber
Treiber fürJDBC-ODBC Bridge
Treiber fürODBC und DB
Treiber A Treiber B
ÖffentlichesProtokoll
Datenbankabhängige Zugriffsprotokolle
JDBC API
JDBC Treiber API
...
JDBCImplementierungs-
alternativen
Prof. K. Gremminger Folie 30Vorlesung 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
Prof. K. Gremminger Folie 31Vorlesung Datenbanksysteme SS 2002
Ablauf einer JDBC-Anwendung
Aufbau einer Verbindung zur Datenbank Explizites Laden eines Datenbanktreibers Automatisches Laden eines Datenbanktreibers
(sql.drivers) Verbindungsaufbau mit UserID und Passwort
Senden einer SQL-Anweisung Erzeugung einer SQL-Anweisung
Verarbeiten der Anfrageergebnisse Über Resultset-Objekt nach dem Cursor-Prinzip
Prof. K. Gremminger Folie 32Vorlesung 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 ladenClass.forName (“sun.jdbc.odbc.JdbcOdbcDriver”);
String url = “jdbc:odbc:thin:@nero:4711:demoDb”;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 ladenClass.forName (“sun.jdbc.odbc.JdbcOdbcDriver”);
String url = “jdbc:odbc:thin:@nero:4711:demoDb”;Connection con = DriverManager.getConnection
(url,‘userid‘, ‘password‘); }}
}
Prof. K. Gremminger Folie 33Vorlesung 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)
Prof. K. Gremminger Folie 34Vorlesung 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;
Prof. K. Gremminger Folie 35Vorlesung 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 () );
}
Prof. K. Gremminger Folie 36Vorlesung Datenbanksysteme SS 2002
Verbindungen und Transaktionen
Es sind mehrere Verbindungen zu einer oder mehreren Datenbanken möglich (con1, con2, ... conn)
Auswahl des Datenbankbereichs über Tripel Katalogname, Schemaname, Objektname(con.setCatalog( ... ))
Transaktionssteuerung erfolgt auf aktiver Verbindung Commit/Rollback (con.rollback( ))
AutoCommit (con.setAutoCommit( false )
Lesetransaktion (con.setReadOnly( true ))
Isolationlevel(con.setTransactionIsolationlevel( Transaction_Serializable ))
Prof. K. Gremminger Folie 37Vorlesung Datenbanksysteme SS 2002
Connection Pooling
Reduktion der Zeiten für DB-Verbindungsaufbau/-abbau Ein Connection Pool ist ein Puffer von DB-Verbindungen Logische und physische DB-Verbindungen
Instanzen von java.sql.Connection und java.sql.PooledConnection
PooledConnection pcon = datastore.getPooledConnection ();Connection con = pcon.getConnection ();con.close;
Vorteilhaft für mehrstufige Systemarchitekturen Web-Applikation mit Servlets und JDBC Applikationsserver für EJB
Prof. K. Gremminger Folie 38Vorlesung 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, ...
Prof. K. Gremminger Folie 39Vorlesung 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 );
Prof. K. Gremminger Folie 40Vorlesung 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, ...
Prof. K. Gremminger Folie 41Vorlesung 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( );
Prof. K. Gremminger Folie 42Vorlesung Datenbanksysteme SS 2002
Einbettung von SQL in Java (SQLJ)
Statische SQL-Anweisungen werden in den Java-Quelltext eingebettet
SQL-Anweisungen werden zur Übersetzungszeit definiert Einzige Variabilität sind Parameter Übersetzung durch Präcompiler (Translator) in Aufrufe
des SQLJ-Laufzeitsystems und SQLJ-Profile SQLJ-Laufzeitsystem (Package sqlj.runtime) benutzt
i.d.R. JDBC-Aufrufe Translator führt syntaktische und semantische
Überprüfungen durch
Prof. K. Gremminger Folie 43Vorlesung Datenbanksysteme SS 2002
Programmierprinzip
Codierung Java-Quelltext mit SQLJ
Java-Quelltext
Bytecode
Translator
Java-Compiler
.sqlj
.java
.class
SQLJ-Profil
SQLJ-Laufzeitsystem
JDBC
SQLJCode
JavaCode
JavaByteCode
RunProgram
Prof. K. Gremminger Folie 44Vorlesung Datenbanksysteme SS 2002
SQLJ-Konventionen
SQLJ-Quelltexte besitzen die Endung “.sqlj“ Anweisungen beginnen mit “#sql“ und werden in
geschweifte Klammern gesetzt #sql { INSERT INTO book VALUES
(‘3-932588-13-4‘, ‘Oracle 8‘, 1, 3, 68.00); }
Anweisungen werden mit “;“ abgeschlossen Verbindung zur Datenbank mittels JDBC-
Mechanismen Es ist eine Default-Verbindung zu definieren
Prof. K. Gremminger Folie 45Vorlesung Datenbanksysteme SS 2002
Host-Variablen
In allen Embedded SQL-Lösungen Sind Variablen der Hostsprache Werden mit ":“ gekennzeichnet
String findBook (String isbn) throws SQLException { String title; #sql { SELECT title INTO :title FROM book WHERE isbn = :isbn }; return title; }
Dienen der Datenkommunikation zwischen SQL und der Host-Programmiersprache (IN, OUT, INOUT)
Es sind Host-Ausdrücke erlaubt#sql price { VALUES (compute_price (:IN orderNo) ) };
Prof. K. Gremminger Folie 46Vorlesung Datenbanksysteme SS 2002
Cursor-Konzept
Zugriff auf Mengen von Ergebnistupeln
In SQLJ Iteratoren Vergleichbar Resultsets von
JDBC Spaltentypen zur Über-
setzungszeit festgelegt Arten
benannter Iterator Positionsiterator
Datenbank
SQL
Anwendungsprogramm
Cursor
Java
Prof. K. Gremminger Folie 47Vorlesung 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();
DeklarationIterator-Variable
DeklarationIterator-Klasse
Iterator-Methoden
InstanziierungIterator-Objekt
FreigebenRessourcen
Prof. K. Gremminger Folie 48Vorlesung 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 überHost-Variablen
Prof. K. Gremminger Folie 49Vorlesung Datenbanksysteme SS 2002
Transaktionssteuerung
Basiert auf den JDBC-Mechanismen Manuelle Kontrolle
#sql { COMMIT };
Festlegung des Zugriffsmodus#sql { SET TRANSACTION READ ONLY };
Festlegung des Isolationlevels#sql { SET TRANSACTION READ WRITE ISOLATIONLEVEL SERIALIZABLE };
Prof. K. Gremminger Folie 50Vorlesung Datenbanksysteme SS 2002
Kontexte
Verbindungskontext beschreibt Datenbankverbindung Pro Verbindung ein Kontext-Objekt
Connection con = DriverManager.getConnection (url, uid, pwd);DefaultContext ctx = new DefaultContext( con );DefaultContext.setDefaultContext( ctx );
Umschaltung auf KontextDefaultContext.setDefaultContext( ctx1 );#sql { SQL-Operations };
alternativ: #sql [ctx1] { SQL-Operation };#sql [ctx2] { SQL-Operation };
Ausführungskontextctx.getExecutionContext().setQueryTimeout( 5 );#sql [ctx] { SQL-Operation };
Prof. K. Gremminger Folie 51Vorlesung Datenbanksysteme SS 2002
SQLJ-Translator
Aufgaben Syntaktische und semantische Überprüfungen Ersetzung SQLJ-Klauseln Code-Generierung für Iterator- , ...-Klassen Erzeugung von Profilen
Profil enthält pro SQL-Anweisung Informationen über die SQL-Operationen, Typ und Übergaberichtung von Parametern und Ergebnisdaten
Offline- vs. Online-Prüfung Implementierung als Kommandozeilenwerkzeug sqlj
oder integriert in Java-Entwicklungsumgebung
Prof. K. Gremminger Folie 52Vorlesung Datenbanksysteme SS 2002
Interoperabilität mit JDBC
Notwendig für Anwendungen, welche sowohl statisches als auch dynamisches SQL benötigen
Interoperabilität betrifft Konvertierung Verbindungskontext/JDBC-Verbindung Konvertierung Iterator/ResultSet
Beispiel:
ResultSetIterator iter;#sql iter = { SQL-Operation };ResultSet rs = iter.getResultSet ();
Prof. K. Gremminger Folie 56Vorlesung Datenbanksysteme SS 2002
Beispiel aus Flugbuchungssystem (FBS)
Hauptprogramm
SQL-Schnittstelle
Ergebnis Pre-Compiler
Programmiersprache Java
Prof. K. Gremminger Folie 57Vorlesung 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;
Prof. K. Gremminger Folie 58Vorlesung Datenbanksysteme SS 2002
Funktionale Erweiterungen des relationalen Datenmodells Integration von objektorientierten Konzepten zur Datenmodellierung in
das relationale Datenmodell Große Objekte (Large Object, LOB): Größe bis einige GBs Geschachtelte Relationen: direkte Aufnahme von Wiederholungsgruppen Typdeklarationen (User Defined Types, UDT): anwendungsspez. Typen Referenzen: Erweiterung des Fremdschlüssel-Konzeptes Pfadausdrücke: ergeben sich wegen Referenzattribute Objektidentität: i.Ggs. zu relationalen Primärschlüsseln Operationen: Realisierung direkt in SQL oder extern in einer prozeduralen
Programmiersprache Vererbung: realisiert Generalisierung und Spezialisierung
Die SQL99-Standardisierung definiert ein standardisiertes objekt-relationales Datenmodell
Achtung: heutige relationale DBS benutzen oft uneinheitliche Syntax
Structured Query Language3 (SQL99)
Prof. K. Gremminger Folie 59Vorlesung Datenbanksysteme SS 2002
LOBs
RDBMS speichern mittlerweile auch „frühere Dateien“ wie Fotografien, Audiodaten, Videosequenzen, Textdokumente etc.
Für die Speicherung solcher Daten werden Large Objects (LOBs) standardisiert
CLOB Character Large Object zur Speicherung langer Texte (z.B. Lebenslauf) Spezielle Zugriffsunterstützung
BLOB Binary Large Objects zur Speicherung/Archivierung nicht zu
interpretierender Daten (z.B. Passfoto (2MB)) NCLOB
National Clob (deshalb wie Clobs) allerdings zur Speicherung von Texten mit Sonderzeichen (z.B. Unicode)
Prof. K. Gremminger Folie 60Vorlesung Datenbanksysteme SS 2002
Einfache Benutzer-definierte Datentypen
Mit vordefinierten Datentypen lassen sich i.d.R. nicht alle anwendungsspezifischen Anforderungen abdecken
Distinct Types basieren auf einem im Datenmodell eingebauten Typ Verhindern, dass Attributwerte semantisch falsch verwendet werden
create final type NotenTyp as decimal(3,2) with comparisons;
create table prüfen(MatrNr int,VorlNr int,PersNr int,Note NotenTyp);
insert into prüfen values( 4711, 2, 12345, NotenTyp( 1.00 ) );
create function NotenDurchschnitt( NotenTyp ) returns NotenTypsource avg( decimal() );
Prof. K. Gremminger Folie 61Vorlesung 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(VorlNr number,Titel varchar(20),SWS number,gelesenVon ref ProfessorenTyp,Voraussetzungen VorlRefListenTyp,member function DurchfallQuote return number,member function AnzHörer return int
);
4711 VIS 2
0815 DBS 4
VorlNr Titel SWS gelesenVon Voraussetzungen
Vorlesungen
Prof. K. Gremminger Folie 62Vorlesung Datenbanksysteme SS 2002
Benutzerdefinierte strukturierte Objekttypen (Forts.)
create table Vorlesungen of VorlesungenTypnested table Voraussetzungen store as Vorgaenger;
insert into Vorlesungenselect 0815, ‘DBS‘, 4, ref(p), VorlRefListenTyp()from Professoren pwhere name = ‘Gremminger‘;
insert into Vorlesungenselect 4711, ‘VIS‘, 2, ref(p), VorlRefListenTyp()from Professoren pwhere 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‘
Prof. K. Gremminger Folie 63Vorlesung Datenbanksysteme SS 2002
Geschachtelte Objekt-Relationen
Schachtelung von Objekten (nicht nur Referenzen)in einem Objekt
Bietet sich bei schwachen Entitätstypen/Kompositionen an
MatrNr Name Semester hört absolviertePrüfungen
Studenten
Inhalt Prüfer Note Datum
12345 Max 4 .........
1.3B
3.3
23456 Moritz 3......
1.05.0
...
Prof. K. Gremminger Folie 64Vorlesung Datenbanksysteme SS 2002
Geschachtelte Objekt-Relationen (Forts.)
create or replace type PrüfungenTyp as object (Inhalt ref VorlesungenTyp,Prüfer ref ProfessorenTyp,Note NotenTyp,Datum date,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(MatrNr number,Name varchar(20),Semester number,hört VorlRefListenTyp,absolviertePrüfungen PrüfungslistenTyp,member function Notenschnitt return number,member function SummeWochenstunden return number
);
Prof. K. Gremminger Folie 65Vorlesung 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);
Prof. K. Gremminger Folie 66Vorlesung 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;vorl VorlesungenTyp;total number := 0;begin
for i in 1..self.hört.count loopUTL_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.Notefrom Studenten s, table(s.absolviertePrüfungen) p;
Prof. K. Gremminger Folie 67Vorlesung Datenbanksysteme SS 2002
(Einfache) Vererbung von SQL-Objekttypen
create type AngestelltenTyp as(PersNr int, Name varchar(20))instantiable;
create type ProfessorenTyp under AngestelltenTyp (Rang char(2), Raum int);
alter type ProfessorenTypadd method anzMitarbeiter()returns intlanguage SQLcontains SQLreads SQL data;
create table Angestellten of AngestelltenTyp;
create table Professoren of ProfessorenTypunder Angestellteninherit select privileges;
Prof. K. Gremminger Folie 68Vorlesung Datenbanksysteme SS 2002
(Einfache) Vererbung von SQL-Objekttypen (Forts.)
create method anzMitarbeiter()for ProfessorenTypreturn (select count(*)
from Assistentenwhere Boss->PersNr = self..PersNr);
insert into Professoren values(4711, ‘Gremminger‘, ‘C3‘, 310);
/* Ausgabe aller Professoren und Assistenten */select a.Name, a.PersNrfrom Angestellten a;
Select a.Name,a.Boss->Name as Chef,a.Boss->anzMitarbeiter as anzJünger
From Assistenten a;
Prof. K. Gremminger Folie 69Vorlesung Datenbanksysteme SS 2002
Komplexe Attributtypencreate type NotenTyp as
(NumWert decimal(3,2), Land varchar(20), StringWert varchar(20));
create type US_NotenTyp under NotenTyp as(WithHonours char(1));
create table Leistungen (Teilnehmer varchar(20),Lehrveranstaltung varchar(20),Note NotenTyp);
insert into Leistungen values(‘Egon’, ‘Java’, US_NotenTyp() ..Land(‘USA’) ..NumWert(4.0) ..StringWert(‘excellent’) ..withHonours(‘y’));
select Teilnehmer, Lehrveranstaltung, Note..Land, Note..NumWertfrom Leistungen;