exec sql

Werbung
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
Herunterladen