Anwendersoftware (AS) Grundlagen von Datenbanken und Informationssystemen Kapitel p 8: Anwendungsprogrammierschnittstelle Holger Schwarz Wintersemester 2009/10 Teile zu diesem Folienskript beruhen auf einer ähnlichen Vorlesung, gehalten von Prof. Dr. T. Härder am Fachbereich Informatik der Universität Kaiserslautern und Prof. Dr. N. Ritter am Fachbereich Informatik der Universität Hamburg. Für dieses Skriptum verbleiben alle Rechte (insbesondere für Nachdruck) bei den Autoren. Anwendungsprogrammierschnittstelle Übersicht • • • • • • Kopplung pp g von DB- und Programmiersprache g p Wirtsspracheneinbettung und Übersetzung Eingebettetes statisches SQL SQL/PSM Dynamisches SQL Call-Level-Interface (CLI) © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 2 Anwendungsprogrammierschnittstelle Kopplung • Übersicht Ü Kopplung CALL-Schnittstelle (Call Level Interface – CLI) SQL-Einbettung Integrierte Sprachen/Spracherweiterungen • persistente Programmiersprachen • DB-Programmiersprachen DB P i h statisch dynamisch © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 3 Anwendungsprogrammierschnittstelle Call-Schnittstelle Call Schnittstelle (Aufruftechnik) • prozedurale p Schnittstelle • DB-Funktionen werden durch Bibliothek von Prozeduren realisiert • DB-Anweisung wird durch expliziten Prozeduraufruf an das Laufzeitsystem des DBS übergeben übergeben, zz. B B. CALL DBS (‘INSERT INTO …’) ’) • Beispiele: CLI: Call Level Interface (SQL-Standard) (SQL Standard) ODBC: Open Database Connectivity (Microsoft) JDBC: Java Database Connectivityy © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart Quelle: [ME00] 4 Anwendungsprogrammierschnittstelle SQL Einbettung SQL-Einbettung • Spracherweiterung p g um spezielle p DB-Befehle ((EXEC SQL Q ...)) • komfortablere Programmierung als mit CLI • statische Einbettung Vorübersetzer (Precompiler) wandelt DB-Aufrufe in Prozeduraufrufe um Nutzung der normalen PS PS-Übersetzer Übersetzer für umgebendes Programm SQL-Anweisungen müssen zur Übersetzungszeit feststehen im SQL-Standard unterstützte Sprachen: C, COBOL, O O FORTRAN, O Ada, d PL1, Pascal, l MUMPS, Java, ... • dynamische Einbettung: Konstruktion von SQL SQL-Anweisungen Anweisungen zur Laufzeit • Beispiele: Embedded SQL (ESQL), Embeded Dynamic SQL (EDSQL) SQLJ © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart Quelle: [ME00] 5 Anwendungsprogrammierschnittstelle Integrationsansätze • persistente p Programmiersprachen, g p , DB-Programmiersprachen g p • unterstützen typischerweise ‚nur‘ ein Typsystem Navigation (satz-/objektorientierter Zugriff) wünschenswert sind jedoch Mehrsprachenfähigkeit und deskriptive DB-Operationen DB Operationen (mengenorientierter Zugriff) • Beispiele: JADE, PM3, Napier88 © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart Quelle: [HC99, MBC+94] 6 Anwendungsprogrammierschnittstelle Relationale APIs • Relationale Anwendungsprogrammierschnittstellen g p g ((APIs)) bieten Mehrsprachenfähigkeit und deskriptive DB-Operationen, erfordern jedoch Maßnahmen zur Überwindung der sog. Fehlanpassung (impedance mismatch): Satzorientierung vs. Mengenorientierung • Kernprobleme der API bei konventionellen Programmiersprachen Konversion und Übergabe von Werten Übergabe Üb b aktueller k ll Werte von Wirtssprachenvariablen h bl (Parametrisierung von DB-Operationen) Mengenorientierung von DB DB-Operationen Operationen - Wie und in welcher Reihenfolge werden Zeilen/Sätze dem AP zur Verfügung gestellt? - Cursor-Konzept © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 7 Anwendungsprogrammierschnittstelle Übersicht • • • • • • Kopplung pp g von DB- und Programmiersprache g p Wirtsspracheneinbettung und Übersetzung Eingebettetes statisches SQL SQL/PSM Dynamisches SQL Call-Level-Interface (CLI) © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 8 Anwendungsprogrammierschnittstelle Wirtsspracheneinbettung und Übersetzung Call-Schnittstelle • DB-Anweisung wird durch expliziten Aufruf an das y des DBS Laufzeitsystem übergeben Beispiel: CALL DBS (‘OPEN C1’) • Es sind prinzipiell keine DBSspezifischen Vorkehrungen bei der AP-Übersetzung erforderlich! • • • • © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart SQL-Einbettung Q g keine syntaktische Unterscheidung zwischen Programm- und DB-Anweisungen DB-Anweisung wird als Zeichenkette ins AP integriert l Beispiel: EXEC SQL OPEN C1 typischerweise Einsatz eines Vorübersetzers PC (Precompiler) PC erzeugt für DB-Anweisungen spezielle Call-Aufrufe Call Aufrufe im AP, AP so dass das modifizierte AP mit dem Wirtssprachencompiler C üb übersetzt werden d kann k 9 Anwendungsprogrammierschnittstelle Von der Übersetzung bis zur Ausführung Embedded-SQLProgramm z.B. in C Programmbibliothek SQL-Precompiler Datenbankkatalog C-Programm C + DBS-Aufrufe DBS Aufrufe Programmteil g in Maschinencode Zugriffsmodul g WirtssprachenCompiler C Linker Ausführbares Progr. Lademodul Loader © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 10 Anwendungsprogrammierschnittstelle Von der Übersetzung bis zur Ausführung • Embedded-SQLProgramm z.B. in C • SQL-Precompiler Datenbankkatalog C-Programm C + DBS-Aufrufe Zugriffsmodul © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart • • Vorübersetzung g des AP Entfernung aller Embedded-SQLAnweisungen aus dem Programm (Kommentare) Ersetzung durch programmiersprachen-spezifische DBS-Aufrufe f f Erzeugung eines „SQL-freien“ Programms in der Programmiersprache DBS-seitige Vorbereitung: Analyse und Optimierung der SQL-Anweisungen und Erstellung eines Zugriffsmoduls im DBK l Katalog 11 Anwendungsprogrammierschnittstelle Von der Übersetzung bis zur Ausführung C-Programm C + DBS-Aufrufe WirtssprachenCompiler C Programmbibliothek Programmteil P t il in i Maschinencode © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart Übersetzung g des AP Umwandlung der Anweisungen der höheren Programmiersprache in Maschinencode (Objektmodul) und Abspeicherung in Programmbibliothek SQL-Anweisungen für Compiler nicht mehr sichtbar Von zentraler Bedeutung: - Anfrageauswertung/optimierung des DBMS ist im Wesentlichen für die effiziente Abarbeitung der SQL-Anweisungen SQL Anweisungen verantwortlich 12 Anwendungsprogrammierschnittstelle Von der Übersetzung bis zur Ausführung Programmbibliothek Programmteil in Maschinencode Linker Zugriffsmodul Ausführbares Progr. Lademodul Loader © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart Linker Zusammenfügen der Objektmodule zu lauffähigem Programm Hinzufügen des SQLLaufzeitsystems Loader Laden des ausführbaren Programms in den Speicher Anbinden des Zugriffsmoduls aus DB-Katalog und automatische i h Überprüfung Üb üf seiner Gültigkeit Programmstart og a sta t 13 Anwendungsprogrammierschnittstelle Auswertungstechnik • Spektrum p von Verfahren mit folgenden g Eckpunkten: p Maximale Vorbereitung einer DB-Anweisung - Für eine DB-Anweisung wird ein zugeschnittenes Programm (Zugriffsmodul) zur Übersetzungszeit (ÜZ) erzeugt - Zur Ausführung einer DB-Anweisung (Laufzeit, LZ) wird das Zugriffsmodul g geladen g und abgewickelt g - Durch Aufrufe des DBMS (genauer: des Zugriffssystems) wird das Ergebnis abgeleitet Keine Vorbereitung einer DB-Anweisung DB Anweisung - typisch für Call-Schnittstellen - Allgemeines Programm (Interpreter) akzeptiert DB DB-Anweisungen Anweisungen als Eingabe und erzeugt durch Aufrufe des Zugriffssystems das Ergebnis © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 14 Anwendungsprogrammierschnittstelle Wahl des Bindezeitpunkts • Was heißt „Binden“? Wann werden die für die Abwicklung einer DB-Anweisung erforderlichen Operationen vom DB-Schema abhängig? • Übersetzungszeit vs. Laufzeit • AP: Select From Where Pnr, Name, Gehalt Pers Beruf = ‘Programmierer‘ • DB-Katalog: SYSREL: SYSATTR: SYSINDEX: SYSAUTH: SYSINT/RULES: © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart Tabellenbeschreibungen: Pers, . . . Attributbeschreibungen: Pnr, Name, Gehalt, . . . IPers (Beruf) . . . P (Beruf), Nutzungsrechte Integritätsbedingungen, Zusicherungen, . . . 15 Anwendungsprogrammierschnittstelle Wahl des Bindezeitpunkts • Zeitpunkt p des Bindens Übersetzungszeit (ÜZ) AP Übersetzungskosten: unerheblich für Antwortzeit (AZ) Zugriffe (zur LZ): effizient ffi i t datenabhängig! gg © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart Laufzeit (LZ) Interpretation: erheblich für AZ Ausgleich gesucht! Invalidierung d h Schemaänderungen durch S h d Zugriffe (zur LZ): t teuer datenunabhängig! gg 16 Anwendungsprogrammierschnittstelle Auswertungstechnik und Bindezeitpunkt • Maximale Vorbereitung g aufwendige Optimierung und Erstellung eines Zugriffsmoduls maximale Auswirkungen von Schemaänderungen, welche die DB Anweisung betreffen DB-Anweisung - Schemaänderungen nach der Übersetzung werden nicht berücksichtigt (neue Zugriffspfade, geänderte Statistiken etc.) - Invalidierung des Zugriffsmoduls und erneute Erstellung • Keine Vorbereitung/Interpretation Interpreter wertet Anweisung (als Zeichenfolge) zur Laufzeit aus aktueller DB-Zustand wird automatisch berücksichtigt sehr hohe Ausführungskosten g bei Programmschleifen g sowie durch häufige Katalogzugriffe interessant vor allem für Ad-hoc-Anfragen bzw. dynamisches SQL © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 17 Anwendungsprogrammierschnittstelle Übersicht • • • • • • Kopplung pp g von DB- und Programmiersprache g p Wirtsspracheneinbettung und Übersetzung Eingebettetes statisches SQL SQL/PSM Dynamisches SQL Call-Level-Interface (CLI) © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 18 Anwendungsprogrammierschnittstelle Eingebettetes statisches SQL: Beispiel exec sql include sqlca; /* SQL Communication Area */ main () { q begin g declare section; exec sql char X[3] ; int GSum; exec sql end declare section; exec sqll connect to dbname; db exec sql insert into Pers (Pnr, Name) values (4711, ‘Ernie‘); exec sql insert into Pers (Pnr, Name) values (4712, ‘Bert‘); printf i tf (“A (“Anr ? ”) ; scanff ( “ % %s”” , X) X); exec sql select sum (Gehalt) into :GSum from Pers where Anr = :X; /* Es wird nur ein Ergebnissatz zurückgeliefert! */ printf (“Gehaltssumme: ( Gehaltssumme: %d\n %d\n” , GSum) exec sql commit work; exec sql disconnect; } © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 19 Anwendungsprogrammierschnittstelle Eingebettetes statisches SQL • Anbindung g einer SQL-Anweisung Q g an die Wirtssprachen-Umgebung p g g eingebettete SQL-Anweisungen werden durch exec sql eingeleitet und durch spezielles Symbol (hier “;”) beendet, um dem Compiler eine Unterscheidung von anderen Anweisungen zu ermöglichen Verwendung von AP-Variablen in SQL-Anweisungen verlangt Deklaration innerhalb eines ‚declare section‘-Blocks sowie Angabe d Präfix des f ““:”” innerhalb h lb von SQL-Anweisungen Kommunikationsbereich SQLCA - Rückgabe von Statusanzeigern u.ä. uä Übergabe der Werte einer Zeile mit Hilfe der INTO-Klausel - INTO target-commalist (Variablenliste des Wirtsprogramms) - Anpassung der Datentypen (Konversion) Aufbau/Abbau einer Verbindung zu einem DBS: connect/disconnect © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 20 Anwendungsprogrammierschnittstelle Cursor Konzept Cursor-Konzept • Zweck satz-weise Abarbeitung von Ergebnismengen Trennung von Qualifikation und Bereitstellung/Verarbeitung von Zeilen • Cursor ist ein Iterator, der einer Anfrage zugeordnet wird und mit it dessen d Hilfe Hilf die di Zeilen Z il der d Ergebnismenge E b i einzeln i l (one ( tuple t l att a time) im Programm bereitgestellt werden • Cursor-Deklaration Syntax DECLARE cursor CURSOR FOR table-exp [ORDER BY order-item-commalist] Beispiel DECLARE C1 CURSOR FOR SELECT Name, Gehalt, Anr FROM Pers WHERE Anr = ‘K55‘ ORDER BY Name; © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 21 Anwendungsprogrammierschnittstelle Cursor-Konzept Cursor Konzept • Cursor-Operationen p OPEN C1 FETCH C1 INTO Var1, Var2, Var3 CLOSE C1 1. Anfrage: OPEN C1 AWP in satzorientierter Programmiersprache 3. Zeile sequentiell holen und verarbeiten (FETCH C1) 4. Cursor schließen (CLOSE C1) 2. Anfrage g auswerten,, Ergebniszeile(n) im Cursor bereitstellen mengenorientiertes DBS © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 22 Anwendungsprogrammierschnittstelle Cursor-Konzept Cursor Konzept • Reihenfolge g der Ergebniszeilen g systembestimmt benutzerspezifiziert (ORDER BY) • Wann wird die Ergebnismenge ermittelt? schritthaltende Auswertung durch das DBS? Verzicht auf eine explizite Zwischenspeicherung ist nur bei einfachen Anfragen möglich. daher Kopie bei OPEN meist erforderlich (ORDER BY BY, Join, Join Aggregat-Funktionen, Aggregat Funktionen ...)) © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 23 Anwendungsprogrammierschnittstelle Cursor: Beispiel exec sql q begin g declare section;; char X[50], Y[3]; exec sql end declare section; exec sql declare C1 cursor for select Name from Pers where Anr = :Y; printf(“Bitte Anr eingeben: \n”); scanf(“%d” scanf( %d , Y); exec sql open C1; while (sqlcode == OK) { exec sql fetch C1 into :X; printf(“Angestellter %d\n”, X); } exec sql close C1; © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 24 Anwendungsprogrammierschnittstelle Aktualisierung • Aktualisierung mit Bezugnahme auf eine Position Wenn die Zeilen, die ein Cursor verwaltet (active set), eindeutig den Zeilen einer Tabelle entsprechen, können sie über Bezugnahme durch geändert werden. den Cursor g Syntax positioned-update ::= UPDATE table SET update-assignment-commalist WHERE CURRENT OF cursor positioned-delete ::= DELETE FROM table WHERE CURRENT OF cursor Beispiel while (sqlcode == ok) { exec sql fetch C1 into :X; ... /* Berechne das neue Gehalt in Z /* exec sql update Pers set Gehalt = :Z where current of C1; } © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 25 Anwendungsprogrammierschnittstelle SQL-Programmiermodell SQL Programmiermodell 1. 1 Cursor C1 2. Mehrere Cursor Verknüpfung der Zeilen im Programm C1 3. Positionsbezogene Aktualisierung C2 C3 C1 INTO Variable Update, Delete © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 26 Anwendungsprogrammierschnittstelle SQL-Programmiermodell SQL Programmiermodell 4. Abhängige g g Cursor C1 Wert 11 Wert1 C3 C2 Wert12 C3 Wert2 Wert13 C2 .. . © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart C3 Wert . 21 .. 27 Anwendungsprogrammierschnittstelle Beispiel: Stücklistenauflösung Tabelle Struktur ((Otnr,, Utnr,, Anzahl)) Aufgabe: Ausgabe aller Endprodukte sowie deren Komponenten max. Schachtelungstiefe sei bekannt (hier: 2) Struktur (Otnr, Tragfläche 5 1 1 Verstrebung 100 Querruder 5 10 Niete 8 Fahrwerk 2 Scharnier © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 3 Utnr, Anzahl) T V 5 T N 100 T Q 1 T F 1 V N 10 Q N 5 Q S 2 F N 8 F S 3 28 Anwendungsprogrammierschnittstelle Beispiel: Stücklistenauflösung exec sql q begin g declare section;; char T0[10], T1[10], T2[10]; int Anz; exec sql end declare section; exec sql declare C0 cursor for select distinct Otnr from Struktur S1 where not exists (select * from Struktur S2 where h S2.Utnr = S1.Otnr); ) exec sql declare C1 cursor for select Utnr, Anzahl from Struktur where Otnr = :T0; exec sql declare C2 cursor for select Utnr Utnr, Anzahl from Struktur where Otnr = :T1; ... © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 29 Anwendungsprogrammierschnittstelle Beispiel: Stücklistenauflösung ... exec sql open C0; while (1) { exec sql fetch C0 into :T0; if (sqlcode ( l d == notfound) tf d) break; b k printf (“ %s\n ” , T0); exec sql open C1; while (2) {exec sql fetch C1 into :T1, :T1 :Anz; if (sqlcode == notfound) break; printf (“ %s: %d\n ” , T1, Anz); exec sql open C2; while (3) { exec sql fetch C2 INTO :T2, :Anz; if (sqlcode == notfound) break; printf (“ ( %s: %d\n ” , T2, T2 Anz); } exec sql close C2; } /* end while (2) */ exec sql close C1; } /* end while (1) */ exec sql close C0; © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 30 Anwendungsprogrammierschnittstelle Beispiel: Stücklistenauflösung • Ausgabe: g T V: 5 N: N: 100 Q: 1 N: S: F: 1 N: S: 10 Tragfläche 5 2 5 Verstrebung 100 8 3 Querruder 5 10 Niete © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 1 1 8 Fahrwerk 2 3 Scharnier 31 Anwendungsprogrammierschnittstelle Erweiterungen zum Cursor Cursor-Konzept Konzept • Syntax: y cursor-def ::= DECLARE cursor [SENSITIVE | INSENSITIVE | ASENSITIVE] [SCROLL | NO SCROLL] CURSOR [WITH HOLD | WITHOUT HOLD] [WITH RETURN | WITHOUT RETURN] FOR table-exp [ORDER BY order-item-commalist] [FOR {READ ONLY | UPDATE [OF column-commalist]}] © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 32 Anwendungsprogrammierschnittstelle Sichtbarkeit von Änderungen • INSENSITIVE CURSOR T sei die Zeilenmenge, die sich für den Cursor zum OPEN-Zeitpunkt (Materialisierung) qualifiziert Spezifikation von INSENSITIVE bewirkt, bewirkt dass eine separate Kopie von T angelegt wird und der Cursor auf die Kopie zugreift Aktualisierungen, g die T betreffen, werden in der Kopie nicht sichtbar gemacht; solche Änderungen könnten z. B. direkt oder über andere Cursor erfolgen Über einen insensitiven Cursor sind keine Aktualisierungsoperationen möglich (UPDATE nicht erlaubt) Die Kombination mit SCROLL ist unproblematisch © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 33 Anwendungsprogrammierschnittstelle Sichtbarkeit von Änderungen • ASENSITIVE CURSOR Standard Bei OPEN muss nicht zwingend eine Kopie von T erstellt werden: die Komplexität der Cursor-Definition Cursor Definition verlangt jedoch oft seine Materialisierung als Kopie Ob Änderungen, g die T betreffen und durch andere Cursor oder direkt erfolgen, in der momentanen Cursor-Instanziierung sichtbar werden, ist implementierungsabhängig Falls UPDATE deklariert wird wird, muss eine eindeutige Abbildung der Cursor-Zeilen auf die Tabelle möglich sein (siehe aktualisierbare Sicht); es wird definitiv keine separate Kopie von T erstellt. © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 34 Anwendungsprogrammierschnittstelle Erweiterte Positionierungsmöglichkeiten • SCROLL-Funktion Syntax des erweiterten FETCH-Statements: EXEC SQL FETCH [ [fetch orientation] FROM ] cursor INTO target list fetch orientation::= NEXT | PRIOR | FIRST | LAST | ABSOLUTE <expression> | RELATIVE <expression> expression © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 35 Anwendungsprogrammierschnittstelle Beispiele • Cursor-Definition EXEC SQL DECLARE C2 SCROLL CURSOR FOR SELECT ... • SCROLL-Beispiele: EXEC SQL FETCH ABSOLUTE 100 FROM C2 INTO ... EXEC SQL FETCH ABSOLUTE -10 FROM C2 INTO ... (zehntletzte Zeile) EXEC SQL FETCH RELATIVE 2 FROM C2 INTO ... (übernächste Zeile) EXEC SQL FETCH RELATIVE -10 FROM C2 INTO ... © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 36 Anwendungsprogrammierschnittstelle Übersicht • • • • • • Kopplung pp g von DB- und Programmiersprache g p Wirtsspracheneinbettung und Übersetzung Eingebettetes statisches SQL SQL/PSM Dynamisches SQL Call-Level-Interface (CLI) © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 37 Anwendungsprogrammierschnittstelle SQL/PSM SQL/PSM: Persistent Stored Modules • SQL-Standard definiert Routinen (SQL-invoked routines) Prozeduren und Funktionen Implementierung in SQL oder extern in einer Programmiersprache Aufruf erfolgt in SQL-Anweisungen häufig hä fi genutzte t t B Bezeichnungen: i h stored t d procedures, d user-defined d fi d functions • SQL-Standard definiert prozedurale Erweiterungen Prozedurale Erweiterungsmöglichkeiten der DBS-Funktionalität aus Sicht der Anwendung Einführung neuer Kontrollstrukturen, z.B. Schleifen, Bedingungen, etc. © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 38 Anwendungsprogrammierschnittstelle Beispiel: SQL SQL-Prozedur Prozedur • Erzeugen g einer SQL-Prozedur Q CREATE PROCEDURE proc1 ( ) BEGIN INSERT INTO Pers VALUES (...); INSERT INTO Abt VALUES (...); END; • Aufruf mit CALL-Anweisung ... EXEC SQL CALL proc1 ( ); ... © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 39 Anwendungsprogrammierschnittstelle Beispiel: SQL SQL-Funktion Funktion • Erzeugen g einer SQL-Funktion Q CREATE FUNCTION dm_in_euro (float v) RETURNS float BEGIN RETURN (v / 1.95583); END; • Aufruf innerhalb einer Anfrage SELECT Bezeichnung, dm_in_euro (Preis) FROM Produkt WHERE dm_in_euro (Preis) < 100 • Nutzung außerhalb von Anfragen SET euro_preis = dm_in_euro (79.00); © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 40 Anwendungsprogrammierschnittstelle Prozedurale Spracherweiterungen Compound statement BEGIN ... END; Variablendeklaration DECLARE var CHAR (6); If statement IF subject (var <> ‘urgent’) THEN ... ELSE ...; Case statement CASE subject (var) WHEN ‘SQL’ THEN ... WHEN ...; Loop statement LOOP <SQL statement list> END LOOP; While statement WHILE i<100 DO ... END WHILE; Repeat statement REPEAT ... UNTIL i<100 END REPEAT; For statement FOR result AS ... DO ... END FOR; Leave statement LEAVE ...; Return statement RETURN ‘urgent’; Call statement CALL procedure_x procedure x (1,3,5); (1 3 5); Assignment statement SET x = ‘abc’; Signal/resignal g g statement SIGNAL divison_by_zero y © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 41 Anwendungsprogrammierschnittstelle SQL/PSM: Vorteile • Leistungsverbesserung g g vor allem in Client/Server-Umgebung / g g Entwerfen von Routinen mit mehreren SQL-Anweisungen Ausführung mehrerer SQL-Anweisungen durch ein EXEC SQL Anzahl der Zugriffe des Anwendungsprogramms auf die DB wird reduziert • Höhere Verarbeitungsmächtigkeit des DBS prozedurale Erweiterungen, Kontrollstrukturen vorübersetzte Ausführungspläne g p werden gespeichert g p und sind wiederverwendbar • Prozeduren und Funktionen als gemeinsamer Code für verschiedene Anwendungsprogramme nutzbar • Höherer Isolationsgrad der Anwendung von der DB • erlaubt reine SQL-Implementierungen komplexer Funktionen (Sicherheitsaspekt) © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 42 Anwendungsprogrammierschnittstelle Übersicht • • • • • • Kopplung pp g von DB- und Programmiersprache g p Wirtsspracheneinbettung und Übersetzung Eingebettetes statisches SQL SQL/PSM Dynamisches SQL Call-Level-Interface (CLI) © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 43 Anwendungsprogrammierschnittstelle Dynamisches SQL • Festlegen/Übergabe g g von SQL-Anweisungen Q g erst zur Laufzeit Benutzer stellt Ad-hoc-Anfrage AP berechnet dynamisch SQL-Anweisung SQL-Anweisung ist aktueller Parameter von Funktionsaufrufen an das DBMS © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 44 Anwendungsprogrammierschnittstelle Dynamisches SQL: Eigenschaften • Vorbereitung g einer SQL-Anweisung Q g kann erst zur Laufzeit beginnen g • Bindung an das DB-Schema erfolgt zum spätest möglichen Zeitpunkt DB-Operationen beziehen sich stets auf den aktuellen DB-Zustand größte Flexibilität und Unabhängigkeit vom DB-Schema • Vorbereitung und Ausführung einer SQL-Anweisung erfolgt typischerweise durch Interpretation Leistungsproblem: - wiederholte Ausführung derselben Anweisung - manche DBMS (z.B. DB2) bewahren Zugriffspläne zur Wiederverwendung in einem Cache auf Übersetzung und Code Code-Generierung Generierung ist jedoch prinzipiell möglich! © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 45 Anwendungsprogrammierschnittstelle Mehrere Sprachansätze • Eingebettetes dynamisches SQL • Call-Level-Interface (CLI) kann ODBC (Open Database Connectivity) implementieren • Java Database Connectivity (JDBC) dynamische SQL-Schnittstelle zur Verwendung mit Java ‘de facto’-Standard für den Zugriff auf relationale Daten von JavaProgrammen aus JDBC ist gut in Java integriert und ermöglicht einen Zugriff auf relationale Datenbanken in einem objektorientierten Programmierstil JDBC ermöglicht das Schreiben von Java-Applets, die von einem WebBrowser auf eine DB zugreifen können © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart Quelle: [ME00, http://java.sun.com/products/jdbc] 46 Anwendungsprogrammierschnittstelle Gemeinsame Anforderungen • Zugriff g auf Metadaten • Übergabe und Abwicklung dynamisch berechneter SQL-Anweisungen • Optionale Trennung von Vorbereitung und Ausführung einmalige Vorbereitung mit Platzhalter (?) für Parameter n-malige Ausführung • Explizite Bindung von Platzhaltern (?) an Wirtsvariable Variable sind zur ÜZ nicht bekannt! Variablenwert wird zur Ausführungszeit vom Parameter übernommen © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 47 Anwendungsprogrammierschnittstelle Eingebettetes Dynamisches SQL • ist im Stil statischem SQL ähnlicher • wird oft von Anwendungen gewählt, die dynamische und statische SQLAnweisungen mischen • Programme mit EDSQL sind kompakter und besser lesbar als solche mit CLI oder JDBC • unterstützt mehrere Wirtssprachen • 4 wesentliche Anweisungen DESCRIBE PREPARE EXECUTE EXECUTE IMMEDIATE • SQL SQL-Anweisungen Anweisungen werden vom Compiler wie Zeichenketten behandelt Deklaration DECLARE STATEMENT Anweisungen enthalten Platzhalter für Parameter (?) statt P Programmvariablen i bl © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 48 Anwendungsprogrammierschnittstelle Trennung von Vorbereitung und Ausführung Prepare-and-Execute optimiert die exec sql declare SQLanw statement; A Anweisung i = ‘DELETE FROM Pers P WHERE Anr A = ?‘; ?‘ exec sql prepare SQLanw from :Anweisung; exec sql execute SQLanw using ‘K51‘; scanf (“ ( %s ” , X); exec sql execute SQLanw using :X; © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart Vorbere eitung mehrfache meh f he Ve Verwendung end ng einer eine dynamisch erzeugten SQLAnweisung Ausfü ührung exec sql begin declare section; char Anweisung [256], X[3]; exec sql end declare section; 49 Anwendungsprogrammierschnittstelle Einmalige Ausführung einer SQL SQL-Anweisung Anweisung • Beispiel: p scanf (“ %s ” , Anweisung); exec sql execute immediate :Anweisung; © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 50 Anwendungsprogrammierschnittstelle Cursor Verwendung Cursor-Verwendung • Beispiel: p exec sql declare SQLanw statement; exec sql prepare SQLanw from “SELECT Name FROM Pers WHERE Anr=?”; exec sql declare C1 cursor for SQLanw; exec sql open C1 using ‘K51‘; K51 ; ... • SELECT-Anweisung SELECT Anweisung nicht Teil von DECLARE CURSOR, CURSOR sondern Teil der PREPARE-Anweisung • OPEN-Anweisung (und FETCH) anstatt EXECUTE © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 51 Anwendungsprogrammierschnittstelle Dynamische Parameterbindung • Beispiel p Anweisung = ‘INSERT INTO Pers VALUES (?, ?, ...)’; exec sql prepare SQLanw from :Anweisung; vname = ‘Ted’; nname = ‘Codd’; ... exec sql execute SQLanw using :vname, :nname, ...; © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 52 Anwendungsprogrammierschnittstelle Zugriff auf Beschreibungsinformation • z.B. wenn Anzahl und Typ yp der dynamischen y Parameter nicht bekannt ist • Deskriptorbereich ist eine gekapselte Datenstruktur, die durch das DBMS verwaltet wird • Beispiel: Anweisung = ‘INSERT INTO Pers VALUES (?, ?, ...)’; exec sql prepare SQLanw from :Anweisung; exec sql allocate descriptor ‘Eingabeparameter’; exec sql describe input SQLanw into sql descriptor ‘Eingabeparameter’; exec sql get descriptor ‘Eingabeparameter’ :n = count; f (i = 1; for 1 i < n; i ++)) { exec sql get descriptor ‘Eingabeparameter’ value :i :attrtyp = type, :attrlänge = length, :attrname = name; ... exec sql set descriptor ‘Eingabeparameter’ value :i data = :d, indicator = :ind; } exec sql execute SQLanw using sql descriptor ‘Eingabeparameter’; © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 53 Anwendungsprogrammierschnittstelle Übersicht • • • • • • Kopplung pp g von DB- und Programmiersprache g p Wirtsspracheneinbettung und Übersetzung Eingebettetes statisches SQL SQL/PSM Dynamisches SQL Call-Level-Interface (CLI) © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 54 Anwendungsprogrammierschnittstelle Call Level Interface Call-Level-Interface • • • • Spezielle p Form von dynamischem y SQL Q Schnittstelle ist als Sammlung von Prozeduren/Funktionen realisiert Direkte Aufrufe der Routinen einer standardisierten Bibliothek Keine Vorübersetzung (Behandlung der DB-Anweisungen) von Anwendungen Vorbereitung der DB DB-Anweisung Anweisung geschieht erst beim Aufruf zur LZ Anwendungen brauchen nicht im Source-Code bereitgestellt werden Wichtig zur Realisierung von kommerzieller AW-Software bzw. Tools • wird sehr häufig in der Praxis eingesetzt! © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 55 Anwendungsprogrammierschnittstelle CLI Standardisierung CLI-Standardisierung • • • • CLI-Standardisierung g in SQL3 Q wurde vorgezogen g g ISO-Standard wurde 1996 verabschiedet starke Anlehnung an ODBC bzw. X/Open CLI Standard-CLI umfasst über 40 Routinen: Verbindungskontrolle Ressourcen-Allokation Ausführung von SQL-Befehlen Zugriff auf Diagnoseinformation Transaktionsklammerung, Informationsanforderung zur Implementierung © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 56 Anwendungsprogrammierschnittstelle Call Level Interface Call-Level-Interface • Vorteile von CLI Schreiben portabler Anwendungen Systemunabhängigkeit Mehrfache Verbindungen zur selben DB Verbindungen zu mehreren DBS Optimierung des Zugriffs (durch Prepare) • Kooperation von AP und DBS maximale gegenseitige Kapselung Zusammenspiel AP/CLI und DBVS ist nicht durch Übersetzungsphase vorbereitet Wahl des DBS zur Laufzeit vielfältige LZ-Abstimmungen erforderlich © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 57 Anwendungsprogrammierschnittstelle Konzept der Handle-Variablen Handle Variablen • Handle ((internes Kennzeichen)) ist letztlich eine Programmvariable, g , die Informationen repräsentiert, die für ein AP durch die CLIImplementierung verwaltet wird • gestattet Austausch von Verarbeitungsinformationen • Arten: Umgebungskennung repräsentiert den globalen Zustand der Applikation Verbindungskennung - separate Kennung: n Verbindungen zu einem oder mehreren DBS - Freigabe/Rücksetzen von Transaktionen Transaktionen, Isolationsgrad Anweisungskennung - mehrfache Definition, auch mehrfache Nutzung - Ausführungszustand einer SQL-Anweisung; sie fasst Informationen zusammen, die bei statischem SQL in SQLCA, SQLDA und Cursorn stehen Deskriptorkennung enthält Informationen, wie Daten einer SQL-Anweisung zwischen DBS und CLI-Programm ausgetauscht werden © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 58 Anwendungsprogrammierschnittstelle • CLI CLI-Beispiel: Beispiel: #include “sqlcli.h” if (SQLExecDirect (hstmt, create, ...) #include <string.h> != SQL_SUCCESS) ... return (print_err (hdbc, hstmt) ) ; { } Q * server;; SQLCHAR /* commit transaction */ SQLCHAR * uid; SQLTransact (henv, hdbc, SQL_COMMIT); SQLCHAR * pwd; HENV henv; // environment handle /* insert row */ HDBC hdb hdbc; // connection ti h handle dl { SQLCHAR iinsertt [ ] = “INSERT INSERT INTO HSTMT hstmt; // statement handle SQLINTEGER id; NameID VALUES (?, ?) ” ; if (SQLPrepare (hstmt, insert, ...) != SQL_SUCCESS)) SQLCHAR name [51]; return (print_err (hdbc, hstmt) ) ; /* connect to database */ SQLAllocEnv (&henv); SQLBindParam (hstmt, 1, ..., id, ...) ; SQLAllocConnect (henv, &hdbc) ; SQLBindParam (hstmt, 2, ..., name, if (SQLConnect (hdbc, server, uid, pwd, ...) != SQL_SUCCESS) ...) ; id = 500; strcpy (name, “Schmidt”) ; return (print_err (hdbc, ...) ) ; /* create a table */ if (SQLExecute (hstmt) != SQL_SUCCESS) SQL SUCCESS) return (print_err (hdbc, hstmt) ) ; } SQLAllocStmt (hdbc, &hstmt) ; { SQLCHAR create [ ] = “CREATE TABLE /* commit transaction */ NameID (ID integer integer, (henv hdbc hdbc, SQL SQL_COMMIT) COMMIT) ; SQLTransact (henv, Name varchar (50) ) ” ; } © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 59 Anwendungsprogrammierschnittstelle JDBC • JDBC: Java Database Connectivityy • JDBC wurde wesentlich beeinflusst durch andere CALL-Schnittstellen, wie ODBC und SQL/CLI. • JDBC bietet Methoden, Methoden um die Verbindung zu einer DB aufzubauen, aufzubauen adad hoc SQL-Anweisungen auszuführen und deren Ergebnis zu verarbeiten. • JDBC ist in verschiedensten Java-Anwendungen g einsetzbar: Java Applications Java Applets Servlets, l JSPs ... © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 60 Anwendungsprogrammierschnittstelle JDBC: Beispiel (1 of 6) import java.sql.*; class DB2Appl { static { try {Class.forName("COM.ibm.db2.jdbc.app.DB2Driver").newInstance(); } catch (Exception e) { System.out.println(e);} } (1) (2) public static void main(String argv[]) { Connection con = null; (3) String url = "jdbc:db2:sample"; jdbc:db2:sample ; (4) try { if (argv.length == 0) { con = DriverManager.getConnection(url);} else if (argv.length == 2) { String userid = argv[0]; String passwd = argv[1]; con = DriverManager.getConnection(url, DriverManager getConnection(url userid, userid passwd);} (5) else { System.out.println("Usage: java DB2Appl[username password]"); System.exit(0);} © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 61 Anwendungsprogrammierschnittstelle JDBC: Beispiel (2 of 6) … System out println("Retrieve System.out.println( Retrieve some data from the database database..."); ); Statement stmt = con.createStatement(); String stmtText = "SELECT projectno, manager FROM projects"; ResultSet rs = stmt.executeQuery(stmtText); System.out.println("Received results:"); while (rs.next()) { String pno = rs.getString(1); rs getString(1); String man = rs.getString("manager"); System.out.print(" Project = " + pno); System.out.print(" Manager = " + man); System.out.print("");} rs.close(); stmt.close(); © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart (6) (7) (8) (9) 62 Anwendungsprogrammierschnittstelle JDBC: Beispiel (3 of 6) … System out println("Update System.out.println( Update the database database... "); ); stmt = con.createStatement(); stmtText = "UPDATE projects SET budget = 10 000 000 WHERE projectno = 'PJ47'"; int rowsUpdated = stmt.executeUpdate(stmtText); } } System.out.print("Changed "+rowsUpdated); if (1 == rowsUpdated) System.out.println(" y p ( row."); ); else System.out.println(" rows."); stmt.close(); () con.close(); } catch( Exception e ) { System.out.println(e);} © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart (10) (11) 63 Anwendungsprogrammierschnittstelle JDBC: Beispiel (4 of 6) (1) JDBC Packages importieren: Das JDBC Package muss die Klasse java.sql.DriverManager verfügbar machen. (2) Passenden JDBC Driver laden: Com.ibm.db2.jdbc.net.DB2Driver für DB2-Applets Com.ibm.db2.jdbc.app.DB2Driver für DB2-Anwendungen (3) Connection-Object: C ti Obj t Connection-Objekt ist notwendig zur Verwaltung der Verbindung zur DB. (4) URL für die DB festlegen: Allgemeine Form: jdbc:<subprotocol>:<subname> Für DB2-Applet-Treiber: jdbc:db2://server_name:port/database_name Für DB2-Anwendungs-Treiber: jdbc:db2:database_name. jdbc:db2:database name © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 64 Anwendungsprogrammierschnittstelle JDBC: Beispiel (5 of 6) (5) Verbindung zur DB: DriverManager.getConnection() Unterschiedliche Parameter sind möglich: getConnection(String url) - Baut eine Verbindung zur angegebenen DB (url) auf, auf wobei der Standardbenutzer verwendet wird. getConnection(String url, String userid, String password) - Baut eine Verbindung zur angegebenen DB (url) auf, auf wobei Benutzer und Passwort explizit angegeben werden. (6) Statement-Objekt: Bietet Methoden zur Ausführung von SQL-Anweisungen SQL-Anweisungen. (7) Anfrageergebnis abfragen: Methode executeQuery(String) ermöglicht die Ausführung von SQLA Anweisungen, i die di eine i Ergebnismenge E b i liefern. li f Ergebnismenge muss einem ResultSet-Objekt zugewiesen werden. j ermöglicht g den Zugriff g auf Metadaten zur Anfrage g sowie Das ResultSet-Objekt den Zugriff auf das Anfrageergebnis. © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 65 Anwendungsprogrammierschnittstelle JDBC: Beispiel (6 of 6) (8) Zugriff auf die Zeilen der Ergebnismenge: Das ResultSet-Objekt bietet Cursor-Funktionalität für den Zugriff auf die Ergebnismenge. Die Methode ResultSet.next() liefert jeweils die nächste Zeile oder false, falls das Ende der Ergebnismenge erreicht ist. In JDBC 2.0 wird die erweiterte Cursor-Funktionalität (SCROLL CURSOR), wie sie der SQL-Standard definiert, unterstützt. (9) Zugriff auf den Wert einer Spalte: ResultSet.getString(int n) liefert den Wert in Spalte n der aktuellen Zeile. ResultSet.getString(String name) liefert den Wert der über den Spaltennamen identifizierten Spalte Spalte. Weitere get-Methoden erlauben den Zugriff auf Spalten anderer Typen. (10) UPDATE-Anweisungen ausführen: Die Methode executeUpdate(String) erlaubt die Ausführung von INSERT/UPDATE/DELETE. Als Ergebnis wird die Anzahl geänderter Zeilen geliefert. (11) Verbindung schließen © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 66 Anwendungsprogrammierschnittstelle JDBC: Metadaten • ResultSet-Objekte j stellen die Metadaten zu einer Anfrage g bereit: Anzahl der Spalten in der Ergebnismenge Name und Typ für jede Spalte Notwendiger Platz zur Darstellung der Werte der Spalte • Beispiel: ... ResultSet rs = stmt.executeQuery("SELECT * from projects"); ResultSetMetaData rsm = rs.getMetaData(); // gibt Metadaten für jede Spalte aus for (int i=1; i<= rsm.getColumnCount(); i++) { println(( "(" p ( + i + ")) " + rsm.getColumnName(i); g ( ); println( " Type = " + rsm.getColumnTypeName(i); println( " Display Size = " + rsm.getColumnDisplaySize(i); } ... © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 67 Anwendungsprogrammierschnittstelle Zusammenfassung • Cursor-Konzept p zur satz-weisen Verarbeitung g von Datenmengen g Anpassung von mengenorientierter Bereitstellung und satz-weiser Verarbeitung von DBS-Ergebnissen Operationen: DECLARE CURSOR, CURSOR OPEN, OPEN FETCH, FETCH CLOSE Erweiterungen: Scroll-Cursor, Sichtbarkeit von Änderungen • Statisches (eingebettetes) SQL hohe Effizienz, gesamte Typprüfung und Konvertierung erfolgen durch Precompiler relativ l einfache f h Programmierung Aufbau aller SQL-Befehle muss zur Übersetzungszeit festliegen es können zur Laufzeit nicht verschiedene Datenbanken dynamisch angesprochen werden © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 68 Anwendungsprogrammierschnittstelle Zusammenfassung • Interpretation einer DB-Anweisung allgemeines Programm (Interpreter) akzeptiert Anweisungen der DBSprache als Eingabe und erzeugt mit Hilfe von Aufrufen des g y Ergebnis g Zugriffssystems hoher Aufwand zur Laufzeit (v.a. bei wiederholter Ausführung einer Anweisung) • Übersetzung, Übersetzung Code Code-Erzeugung Erzeugung und Ausführung einer DB DB-Anweisung Anweisung für jede DB-Anweisung wird ein zugeschnittenes Programm erzeugt (Übersetzungszeit), das zur Laufzeit abgewickelt wird und dabei mit Hilfe von Aufrufen des Zugriffssystems das Ergebnis ableitet Übersetzungsaufwand wird zur Laufzeit soweit wie möglich vermieden • PSM zielt ab auf Leistungsverbesserung, vor allem in Client/ServerUmgebung erhöht die Verarbeitungsmächtigkeit g g des DBS © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 69 Anwendungsprogrammierschnittstelle Zusammenfassung • Dynamisches y SQL Q Festlegung/Übergabe von SQL-Anweisungen zur Laufzeit hohe Flexibilität, schwierige(re) Programmierung Unterschiede zu statischem, eingebettetem SQL - explizite Anweisungen zur Datenabbildung zwischen DBS und Programmvariablen - klare Trennung zwischen Anwendungsprogramm und SQL (→ einfacheres Debugging) • CLI Schnittstelle ist als Sammlung von Prozeduren/Funktionen realisiert Keine Vorübersetzung oder Vorbereitung - Anwendungen brauchen nicht im Source-Code bereitgestellt werden - Wichtig zur Realisierung von kommerzieller AW-Software bzw. Tools © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 70 Anwendungsprogrammierschnittstelle Zusammenfassung • JDBC bietet Schnittstelle für den Zugriff auf (objekt-) relationale DBS aus Java-Anwendungen vermeidet einige syntaktischen Mängel (Lesbarkeit, Fehleranfälligkeit) von CLI • SQLJ (ergänzende ( ä d Information) I f ti ) eingebettete Sprache für „statische” Java-Programme zielt i lt auff verbesserte b t LLaufzeiteffizienz f it ffi i iim V Vergleich l i h zu JDBC ab, b Syntax- und Semantikprüfung zur Übersetzungszeit größere Unabhängigkeit von verschiedenen SQL SQL-Dialekten Dialekten © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 71 Anwendungsprogrammierschnittstelle Ergänzende Literatur zu diesem Kapitel [[HC99]] [MBC+94] [ME00] A. L. Hosking, g, J. Chen: PM3: An Orthogonally g y Persistent Systems Programming Language – Design, Implementation, Performance. VLDB, 1999. R Morrison, R. Morrison A A.L. L Brown, Brown R.C.H. R C H Connor, Connor Q Q.I. I Cutts Cutts, A. A Dearle, Dearle G.N.C. Kirby, D.S. Munro: The Napier88 Reference Manual (Release 2.0) University of St Andrews Technical Report CS/94/8 (1994). (1994) J. Melton, A. Eisenberg: Understanding SQL and Java Together. g Kaufmann, 2000. Morgan © Prof. Dr. B. Mitschang, Dr. H. Schwarz, Universität Stuttgart 72