Beruflich Dokumente
Kultur Dokumente
Datenbanken und
Informationssysteme
Kapitel 1:
Anwendungsprogrammierschnittstelle
Bernhard Mitschang
Wintersemester 2013/2014
Teile zu diesem Folienskript beruhen auf einer hnlichen Vorlesung, gehalten von Prof. Dr. T. Hrder am
Fachbereich Informatik der Universitt Kaiserslautern und Prof. Dr. N. Ritter am Fachbereich Informatik der
Universitt Hamburg. Fr dieses Skriptum verbleiben alle Rechte (insbesondere fr Nachdruck) bei den
Autoren.
Anwendungsprogrammierschnittstelle
bersicht
Anwendungsprogrammierschnittstelle
Kopplung
bersicht
Kopplung
CALL-Schnittstelle
(Call Level Interface CLI)
SQL-Einbettung
Integrierte Sprachen/Spracherweiterungen
persistente Programmiersprachen
DB-Programmiersprachen
statisch
dynamisch
Anwendungsprogrammierschnittstelle
Call-Schnittstelle (Aufruftechnik)
prozedurale Schnittstelle
DB-Funktionen werden durch Bibliothek von Prozeduren realisiert
DB-Anweisung wird durch expliziten Prozeduraufruf an das
Laufzeitsystem des DBS bergeben, z. B. CALL DBS (INSERT INTO )
Beispiele:
Quelle: [ME00]
Anwendungsprogrammierschnittstelle
SQL-Einbettung
Spracherweiterung um spezielle DB-Befehle (EXEC SQL ...)
komfortablere Programmierung als mit CLI
statische Einbettung
Vorbersetzer (Precompiler) wandelt DB-Aufrufe in Prozeduraufrufe
um
Nutzung der normalen PS-bersetzer fr umgebendes Programm
SQL-Anweisungen mssen zur bersetzungszeit feststehen
im SQL-Standard untersttzte Sprachen:
C, COBOL, FORTRAN, Ada, PL1, Pascal, MUMPS, Java, ...
dynamische Einbettung:
Konstruktion von SQL-Anweisungen zur Laufzeit
Beispiele:
Embedded SQL (ESQL), Embeded Dynamic SQL (EDSQL)
SQLJ
Quelle: [ME00]
Anwendungsprogrammierschnittstelle
Integrationsanstze
persistente Programmiersprachen, DB-Programmiersprachen
untersttzen typischerweise nur
ein Typsystem
Navigation (satz-/objektorientierter Zugriff)
wnschenswert sind jedoch Mehrsprachenfhigkeit und deskriptive
DB-Operationen (mengenorientierter Zugriff)
Beispiele:
JADE, PM3, Napier88
Anwendungsprogrammierschnittstelle
Relationale APIs
Relationale Anwendungsprogrammierschnittstellen (APIs)
bieten Mehrsprachenfhigkeit und deskriptive DB-Operationen,
erfordern jedoch Manahmen zur berwindung der sog.
Fehlanpassung (impedance mismatch):
Satzorientierung vs. Mengenorientierung
Kernprobleme der API bei konventionellen Programmiersprachen
Konversion und bergabe von Werten
bergabe aktueller Werte von Wirtssprachenvariablen
(Parametrisierung von DB-Operationen)
Mengenorientierung von DB-Operationen
- Wie und in welcher Reihenfolge werden Zeilen/Stze dem AP zur
Verfgung gestellt?
- Cursor-Konzept
7
Anwendungsprogrammierschnittstelle
bersicht
Anwendungsprogrammierschnittstelle
SQL-Einbettung
syntaktische Unterscheidung
zwischen Programm- und DBAnweisungen
DB-Anweisung wird als
Zeichenkette ins AP integriert
Beispiel:
EXEC SQL OPEN C1
typischerweise Einsatz eines
Vorbersetzers PC (Precompiler)
PC erzeugt fr DB-Anweisungen
spezielle Call-Aufrufe im AP, so
dass das modifizierte AP mit dem
Wirtssprachencompiler C
bersetzt werden kann
9
Anwendungsprogrammierschnittstelle
Programmbibliothek
SQL-Precompiler
Datenbankkatalog
C-Programm
C + DBS-Aufrufe
WirtssprachenCompiler C
Programmteil in
Maschinencode
Zugriffsmodul
Linker
Ausfhrbares Progr.
Lademodul
Loader
10
Anwendungsprogrammierschnittstelle
Embedded-SQLProgramm
z.B. in C
SQL-Precompiler
Datenbankkatalog
C-Programm
C + DBS-Aufrufe
Zugriffsmodul
Vorbersetzung des AP
Entfernung aller Embedded-SQLAnweisungen aus dem Programm
(Kommentare)
Ersetzung durch
programmiersprachen-spezifische
DBS-Aufrufe
Erzeugung eines SQL-freien
Programms in der
Programmiersprache
DBS-seitige Vorbereitung:
Analyse und Optimierung der
SQL-Anweisungen und Erstellung
eines Zugriffsmoduls im DBKatalog
11
Anwendungsprogrammierschnittstelle
WirtssprachenCompiler C
Programmbibliothek
Programmteil in
Maschinencode
bersetzung des AP
Umwandlung der
Anweisungen der hheren
Programmiersprache in
Maschinencode (Objektmodul)
und Abspeicherung in
Programmbibliothek
SQL-Anweisungen fr
Compiler nicht mehr sichtbar
Von zentraler Bedeutung:
- Anfrageauswertung/optimierung des DBMS ist im
Wesentlichen fr die
effiziente Abarbeitung der
SQL-Anweisungen
verantwortlich
12
Anwendungsprogrammierschnittstelle
Programmbibliothek
Programmteil in
Maschinencode
Linker
Zugriffsmodul
Ausfhrbares Progr.
Lademodul
Loader
Linker
Zusammenfgen der
Objektmodule zu lauffhigem
Programm
Hinzufgen des SQLLaufzeitsystems
Loader
Laden des ausfhrbaren
Programms in den Speicher
Anbinden des Zugriffsmoduls
aus DB-Katalog und
automatische berprfung
seiner Gltigkeit
Programmstart
13
Anwendungsprogrammierschnittstelle
Auswertungstechnik
Spektrum von Verfahren mit folgenden Eckpunkten:
Maximale Vorbereitung einer DB-Anweisung
- Fr eine DB-Anweisung wird ein zugeschnittenes Programm
(Zugriffsmodul) zur bersetzungszeit (Z) erzeugt
- Zur Ausfhrung einer DB-Anweisung (Laufzeit, LZ) wird das
Zugriffsmodul geladen und abgewickelt
- Durch Aufrufe des DBMS (genauer: des Zugriffssystems) wird das
Ergebnis abgeleitet
Keine Vorbereitung einer DB-Anweisung
- typisch fr Call-Schnittstellen
- Allgemeines Programm (Interpreter) akzeptiert DB-Anweisungen
als Eingabe und erzeugt durch Aufrufe des Zugriffssystems das
Ergebnis
14
Anwendungsprogrammierschnittstelle
AP:
Select
From
Where
DB-Katalog:
SYSREL:
SYSATTR:
SYSINDEX:
SYSAUTH:
SYSINT/RULES:
Tabellenbeschreibungen:
Pers, . . .
Attributbeschreibungen:
Pnr, Name, Gehalt, . . .
IPers(Beruf), . . .
Nutzungsrechte
Integrittsbedingungen,
Zusicherungen, . . .
15
Anwendungsprogrammierschnittstelle
AP
bersetzungskosten:
unerheblich fr Antwortzeit (AZ)
datenabhngig!
Laufzeit (LZ)
Interpretation:
erheblich fr AZ
Ausgleich
gesucht!
Invalidierung
durch Schemanderungen
datenunabhngig!
16
Anwendungsprogrammierschnittstelle
Keine Vorbereitung/Interpretation
Interpreter wertet Anweisung (als Zeichenfolge) zur Laufzeit aus
aktueller DB-Zustand wird automatisch bercksichtigt
sehr hohe Ausfhrungskosten bei Programmschleifen sowie durch
hufige Katalogzugriffe
interessant vor allem fr Ad-hoc-Anfragen bzw. dynamisches SQL
17
Anwendungsprogrammierschnittstelle
bersicht
18
Anwendungsprogrammierschnittstelle
Anwendungsprogrammierschnittstelle
20
Anwendungsprogrammierschnittstelle
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 dessen Hilfe die Zeilen der Ergebnismenge einzeln (one tuple at a
time) im Programm bereitgestellt werden
Cursor-Deklaration
Syntax DECLARE cursor CURSOR FOR table-exp
[ORDER BY order-item-commalist]
Beispiel
Anwendungsprogrammierschnittstelle
Cursor-Konzept
Cursor-Operationen
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 schlieen
(CLOSE C1)
2. Anfrage auswerten,
Ergebniszeile(n) im
Cursor bereitstellen
mengenorientiertes
DBS
22
Anwendungsprogrammierschnittstelle
Cursor-Konzept
Reihenfolge der Ergebniszeilen
systembestimmt
benutzerspezifiziert (ORDER BY)
Wann wird die Ergebnismenge ermittelt?
schritthaltende Auswertung durch das DBS?
Verzicht auf eine explizite Zwischenspeicherung ist nur bei einfachen
Anfragen mglich.
daher Kopie bei OPEN meist erforderlich
(ORDER BY, Join, Aggregat-Funktionen, ...)
23
Anwendungsprogrammierschnittstelle
Cursor: Beispiel
exec sql begin 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, Y);
exec sql open C1;
while (sqlcode == OK)
{
exec sql fetch C1 into :X;
printf(Angestellter %d\n, X);
}
exec sql close C1;
24
Anwendungsprogrammierschnittstelle
Aktualisierung
Aktualisierung mit Bezugnahme auf eine Position
Wenn die Zeilen, die ein Cursor verwaltet (active set), eindeutig den
Zeilen einer Tabelle entsprechen, knnen sie ber Bezugnahme durch
den Cursor gendert werden.
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; }
25
Anwendungsprogrammierschnittstelle
SQL-Programmiermodell
1. 1 Cursor
C1
2. Mehrere Cursor
Verknpfung der
Zeilen im
Programm
C1
3. Positionsbezogene Aktualisierung
C2
C3
C1
INTO
Variable
Update, Delete
26
Anwendungsprogrammierschnittstelle
SQL-Programmiermodell
4. Abhngige Cursor
C1
Wert 11
Wert1
C3
C2
Wert12
C3
Wert2
Wert13
C2
..
.
C3
Wert
. 21
..
27
Anwendungsprogrammierschnittstelle
Beispiel: Stcklistenauflsung
Tabelle Struktur (Otnr, Utnr, Anzahl)
Aufgabe: Ausgabe aller Endprodukte sowie deren Komponenten
max. Schachtelungstiefe sei bekannt (hier: 2)
Struktur (Otnr,
Tragflche
5
Verstrebung 100
Querruder
5
10
Niete
Fahrwerk
2
Scharnier
Utnr,
Anzahl)
100
10
28
Anwendungsprogrammierschnittstelle
Beispiel: Stcklistenauflsung
exec sql begin 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 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, Anzahl from Struktur
where Otnr = :T1;
...
29
Anwendungsprogrammierschnittstelle
Beispiel: Stcklistenauflsung
...
exec sql open C0;
while (1) {
exec sql fetch C0 into :T0;
if (sqlcode == notfound) break;
printf ( %s\n , T0);
exec sql open C1;
while (2) {exec sql fetch C1 into :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, Anz); }
exec sql close C2; } /* end while (2) */
exec sql close C1; } /* end while (1) */
exec sql close C0;
30
Anwendungsprogrammierschnittstelle
Beispiel: Stcklistenauflsung
Ausgabe:
T
V: 5
N: 10
N: 100
Q: 1
N: 5
S: 2
F: 1
N: 8
S: 3
Tragflche
5
Verstrebung 100
Querruder
5
10
Niete
Fahrwerk
Scharnier
31
Anwendungsprogrammierschnittstelle
32
Anwendungsprogrammierschnittstelle
33
Anwendungsprogrammierschnittstelle
34
Anwendungsprogrammierschnittstelle
Erweiterte Positionierungsmglichkeiten
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>
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 ...
(bernchste Zeile)
EXEC SQL FETCH RELATIVE -10 FROM C2 INTO ...
36
Anwendungsprogrammierschnittstelle
bersicht
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
hufig genutzte Bezeichnungen: stored procedures, user-defined
functions
SQL-Standard definiert prozedurale Erweiterungen
Prozedurale Erweiterungsmglichkeiten der DBS-Funktionalitt aus
Sicht der Anwendung
Einfhrung neuer Kontrollstrukturen, z.B. Schleifen, Bedingungen, etc.
38
Anwendungsprogrammierschnittstelle
Beispiel: SQL-Prozedur
Erzeugen einer SQL-Prozedur
CREATE PROCEDURE proc1 ( )
BEGIN
INSERT INTO Pers VALUES (...);
INSERT INTO Abt VALUES (...);
END;
39
Anwendungsprogrammierschnittstelle
Beispiel: SQL-Funktion
Erzeugen einer SQL-Funktion
CREATE FUNCTION dm_in_euro (float v)
RETURNS float
BEGIN
RETURN (v / 1.95583);
END;
Anwendungsprogrammierschnittstelle
Prozedurale Spracherweiterungen
Compound statement
Variablendeklaration
If statement
Case statement
Loop statement
While statement
Repeat statement
For statement
Leave statement
LEAVE ...;
Return statement
RETURN urgent;
Call statement
Assignment statement
SET x = abc;
Signal/resignal statement
SIGNAL divison_by_zero
41
Anwendungsprogrammierschnittstelle
SQL/PSM: Vorteile
Leistungsverbesserung vor allem in Client/Server-Umgebung
Entwerfen von Routinen mit mehreren SQL-Anweisungen
Ausfhrung mehrerer SQL-Anweisungen durch ein EXEC SQL
Anzahl der Zugriffe des Anwendungsprogramms auf die DB wird
reduziert
Anwendungsprogrammierschnittstelle
bersicht
43
Anwendungsprogrammierschnittstelle
Dynamisches SQL
Festlegen/bergabe von SQL-Anweisungen erst zur Laufzeit
Benutzer stellt Ad-hoc-Anfrage
AP berechnet dynamisch SQL-Anweisung
SQL-Anweisung ist aktueller Parameter von Funktionsaufrufen an das
DBMS
44
Anwendungsprogrammierschnittstelle
45
Anwendungsprogrammierschnittstelle
Mehrere Sprachanstze
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 fr den Zugriff auf relationale Daten von JavaProgrammen aus
JDBC ist gut in Java integriert und ermglicht einen Zugriff auf
relationale Datenbanken in einem objektorientierten Programmierstil
JDBC ermglicht das Schreiben von Java-Applets, die von einem WebBrowser auf eine DB zugreifen knnen
46
Anwendungsprogrammierschnittstelle
Gemeinsame Anforderungen
Zugriff auf Metadaten
bergabe und Abwicklung dynamisch berechneter SQL-Anweisungen
Optionale Trennung von Vorbereitung und Ausfhrung
einmalige Vorbereitung mit Platzhalter (?) fr Parameter
n-malige Ausfhrung
Explizite Bindung von Platzhaltern (?) an Wirtsvariable
Variable sind zur Z nicht bekannt!
Variablenwert wird zur Ausfhrungszeit vom Parameter bernommen
47
Anwendungsprogrammierschnittstelle
Anwendungsprogrammierschnittstelle
Vorbereitung
Ausfhrung
49
Anwendungsprogrammierschnittstelle
50
Anwendungsprogrammierschnittstelle
Cursor-Verwendung
Beispiel:
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;
...
51
Anwendungsprogrammierschnittstelle
Dynamische Parameterbindung
Beispiel
Anweisung = INSERT INTO Pers VALUES (?, ?, ...);
exec sql prepare SQLanw from :Anweisung;
vname = Ted;
nname = Codd;
...
exec sql execute SQLanw using :vname, :nname, ...;
52
Anwendungsprogrammierschnittstelle
Anwendungsprogrammierschnittstelle
bersicht
54
Anwendungsprogrammierschnittstelle
Call-Level-Interface
55
Anwendungsprogrammierschnittstelle
CLI-Standardisierung
56
Anwendungsprogrammierschnittstelle
Call-Level-Interface
Vorteile von CLI
Schreiben portabler Anwendungen
Systemunabhngigkeit
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
vielfltige LZ-Abstimmungen erforderlich
57
Anwendungsprogrammierschnittstelle
Anwendungsprogrammierschnittstelle
CLI-Beispiel:
#include sqlcli.h
#include <string.h>
!= SQL_SUCCESS)
...
SQLCHAR * server;
/* commit transaction */
SQLCHAR * uid;
SQLCHAR * pwd;
HENV henv; // environment handle
/* insert row */
/* connect to database */
SQLAllocEnv (&henv);
/* commit transaction */
}
59
Anwendungsprogrammierschnittstelle
JDBC
JDBC: Java Database Connectivity
JDBC wurde wesentlich beeinflusst durch andere CALL-Schnittstellen, wie
ODBC und SQL/CLI.
JDBC bietet Methoden, um die Verbindung zu einer DB aufzubauen, adhoc SQL-Anweisungen auszufhren und deren Ergebnis zu verarbeiten.
JDBC ist in verschiedensten Java-Anwendungen einsetzbar:
Java Applications
Java Applets
Servlets, JSPs
...
60
Anwendungsprogrammierschnittstelle
JDBC: Beispiel (1 of 6)
import java.sql.*;
(1)
class DB2Appl {
static {
try {Class.forName("COM.ibm.db2.jdbc.app.DB2Driver").newInstance();
(2)
} catch (Exception e) { System.out.println(e);}
public static void main(String argv[]) {
Connection con = null;
(3)
String url = "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, userid, passwd);}
(5)
else {
61
Anwendungsprogrammierschnittstelle
JDBC: Beispiel (2 of 6)
(6)
(7)
(8)
(9)
62
Anwendungsprogrammierschnittstelle
JDBC: Beispiel (3 of 6)
System.out.print("Changed "+rowsUpdated);
if (1 == rowsUpdated)
System.out.println(" row.");
else
System.out.println(" rows.");
stmt.close();
con.close();
} catch( Exception e ) { System.out.println(e);}
}
(10)
(11)
63
Anwendungsprogrammierschnittstelle
JDBC: Beispiel (4 of 6)
(1) JDBC Packages importieren:
Das JDBC Package muss die Klasse java.sql.DriverManager verfgbar
machen.
(2) Passenden JDBC Driver laden:
Com.ibm.db2.jdbc.net.DB2Driver fr DB2-Applets
Com.ibm.db2.jdbc.app.DB2Driver fr DB2-Anwendungen
(3) Connection-Object:
Connection-Objekt ist notwendig zur Verwaltung der Verbindung zur DB.
(4) URL fr die DB festlegen:
Allgemeine Form: jdbc:<subprotocol>:<subname>
Fr DB2-Applet-Treiber: jdbc:db2://server_name:port/database_name
Fr DB2-Anwendungs-Treiber: jdbc:db2:database_name.
64
Anwendungsprogrammierschnittstelle
JDBC: Beispiel (5 of 6)
(5) Verbindung zur DB: DriverManager.getConnection()
Unterschiedliche Parameter sind mglich:
getConnection(String url)
- Baut eine Verbindung zur angegebenen DB (url) auf, wobei der Standardbenutzer
verwendet wird.
(6) Statement-Objekt:
Bietet Methoden zur Ausfhrung von SQL-Anweisungen.
(7) Anfrageergebnis abfragen:
Methode executeQuery(String) ermglicht die Ausfhrung von SQLAnweisungen, die eine Ergebnismenge liefern.
Ergebnismenge muss einem ResultSet-Objekt zugewiesen werden.
Das ResultSet-Objekt ermglicht den Zugriff auf Metadaten zur Anfrage sowie
den Zugriff auf das Anfrageergebnis.
65
Anwendungsprogrammierschnittstelle
JDBC: Beispiel (6 of 6)
(8) Zugriff auf die Zeilen der Ergebnismenge:
Das ResultSet-Objekt bietet Cursor-Funktionalitt fr den Zugriff auf die
Ergebnismenge. Die Methode ResultSet.next() liefert jeweils die nchste Zeile
oder false, falls das Ende der Ergebnismenge erreicht ist.
In JDBC 2.0 wird die erweiterte Cursor-Funktionalitt (SCROLL CURSOR), wie
sie der SQL-Standard definiert, untersttzt.
(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.
Weitere get-Methoden erlauben den Zugriff auf Spalten anderer Typen.
(10) UPDATE-Anweisungen ausfhren:
Die Methode executeUpdate(String) erlaubt die Ausfhrung von
INSERT/UPDATE/DELETE. Als Ergebnis wird die Anzahl genderter Zeilen
geliefert.
(11) Verbindung schlieen
66
Anwendungsprogrammierschnittstelle
JDBC: Metadaten
ResultSet-Objekte stellen die Metadaten zu einer Anfrage bereit:
Anzahl der Spalten in der Ergebnismenge
Name und Typ fr jede Spalte
Notwendiger Platz zur Darstellung der Werte der Spalte
Beispiel:
...
ResultSet rs = stmt.executeQuery("SELECT * from projects");
ResultSetMetaData rsm = rs.getMetaData();
// gibt Metadaten fr jede Spalte aus
for (int i=1; i<= rsm.getColumnCount(); i++) {
println( "(" + i + ") "
+ rsm.getColumnName(i);
println( " Type =
" + rsm.getColumnTypeName(i);
println( " Display Size = " + rsm.getColumnDisplaySize(i);
}
...
67
Anwendungsprogrammierschnittstelle
Zusammenfassung
Cursor-Konzept zur satzweisen Verarbeitung von Datenmengen
Anpassung von mengenorientierter Bereitstellung und
satz-weiser Verarbeitung von DBS-Ergebnissen
Operationen: DECLARE CURSOR, OPEN, FETCH, CLOSE
Erweiterungen: Scroll-Cursor, Sichtbarkeit von nderungen
Statisches (eingebettetes) SQL
hohe Effizienz, gesamte Typprfung und Konvertierung erfolgen durch
Precompiler
relativ einfache Programmierung
Aufbau aller SQL-Befehle muss zur bersetzungszeit festliegen
es knnen zur Laufzeit nicht verschiedene Datenbanken dynamisch
angesprochen werden
68
Anwendungsprogrammierschnittstelle
Zusammenfassung
Interpretation einer DB-Anweisung
allgemeines Programm (Interpreter) akzeptiert Anweisungen der DBSprache als Eingabe und erzeugt mit Hilfe von Aufrufen des
Zugriffssystems Ergebnis
hoher Aufwand zur Laufzeit (v.a. bei wiederholter Ausfhrung einer
Anweisung)
bersetzung, Code-Erzeugung und Ausfhrung einer DB-Anweisung
fr 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 mglich vermieden
PSM
zielt ab auf Leistungsverbesserung, vor allem in Client/ServerUmgebung
erhht die Verarbeitungsmchtigkeit des DBS
69
Anwendungsprogrammierschnittstelle
Zusammenfassung
Dynamisches SQL
Festlegung/bergabe von SQL-Anweisungen zur Laufzeit
hohe Flexibilitt, 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 Vorbersetzung oder Vorbereitung
- Anwendungen brauchen nicht im Source-Code bereitgestellt werden
- Wichtig zur Realisierung von kommerzieller AW-Software bzw. Tools
70
Anwendungsprogrammierschnittstelle
Zusammenfassung
JDBC
bietet Schnittstelle fr den Zugriff auf (objekt-) relationale DBS
aus Java-Anwendungen
vermeidet einige syntaktische Mngel (Lesbarkeit,
Fehleranflligkeit) von CLI
71
Anwendungsprogrammierschnittstelle
[MBC+94]
[ME00]
72