K8 Anwendungsprogrammierschnittstelle Flashcards
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Kopplung von DB- und Programmiersprache
Call-Schnittstelle (prozedurale Schnittstelle, CLI)
- DB-Funktionen werden durch Bibliothek von Prozeduren realisiert
- Anwendung enthält lediglich Prozeduraufrufe
Einbettung von SQL (Embedded SQL, ESQL)
- Spracherweiterung um spezielle DB-Befehle (EXEC SQL …)
- komfortablere Programmierung als mit CLI
statische Einbettung
- Vorübersetzer (Precompiler) wandelt DB-Aufrufe in Prozeduraufrufe um
- Nutzung der normalen PS-Übersetzer für umgebendes Programm
- SQL-Anweisungen müssen zur Übersetzungszeit feststehen
- im SQL-Standard unterstützte Sprachen: C, COBOL, FORTRAN, Ada, PL1, Pascal, MUMPS, Java, …
dynamische Einbettung:
- Konstruktion von SQL-Anweisungen zur Laufzeit
Integrationsansätze unterstützen typischerweise ‚nur‘
- ein Typsystem
- Navigation (satz-/objektorientierterZugriff)
- wünschenswert sind jedoch Mehrsprachenfähigkeit und deskriptive DB-Operationen (mengenorientierter Zugriff)

GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Relationale Anwendungsprogrammierschnittstellen (APIs)
- bieten Mehrsprachenfähigkeit und deskriptive DB-Operationen,
- erfordern jedoch Maßnahmen zur Überwindung der sog. Fehlanpassung (impedance mismatch): Satzorientierung vs. Mengenorientierung
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
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/Sätze dem AP zur Verfügung gestellt?
- Cursor-Konzept
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Eingebettetes statisches SQL:
Anbindung einer SQL-Anweisung an die Wirtssprachen-Umgebung
- 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 des Präfix “:” innerhalb von SQL-Anweisungen
- Kommunikationsbereich SQLCA (Rückgabe von Statusanzeigern 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

GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Cursor-Konzept: Zweck, Iterator, Cursor-Deklaration
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

GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Cursor-Konzept: Cursor-Operation, Reihenfolge der Ergebniszeilen, Wann wird die Ergebnismene ermittelt?
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 möglich.
- daher Kopie bei OPEN meist erforderlich (ORDER BY, Join, Aggregat-Funktionen, …)

GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Cursor-Konzept: Veranschaulichung der Cursor-Schnittstelle

GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Cursor-Konzept: C-Beispiel

GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Cursor-Konzept: 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 den Cursor geändert werden.

GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Cursor-Konzept: SQL-Programmiermodell

GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Cursor-Konzept: SQL-Programmiermodell - Beispiel: Stücklistenauflösung

GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Cursor-Konzept: Erweiterungen - Syntax

GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Cursor-Konzept: Erweiterungen - SCROLL: Erweiterte Positionierungsmöglichkeiten

GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Cursor-Konzept: Erweiterungen - Sichtbarkeit von Änderungen - INSENSITIVE CURSOR
- T sei die Zeilenmenge, die sich für den Cursor zum OPEN-Zeitpunkt (Materialisierung) qualifiziert
- Spezifikation von INSENSITIVE bewirkt, dass eine separate Kopie von T angelegt wird und der Cursor auf die Kopie zugreift
- Aktualisierungen, 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
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Cursor-Konzept: Erweiterungen - Sichtbarkeit von Änderungen - ASENSITIVE CURSOR
- Standard
- Bei OPEN muss nicht zwingend eine Kopie von T erstellt werden: die Komplexität der Cursor-Definition verlangt jedoch oft seine Materialisierung als Kopie
- Ob Änderungen, die T betreffen und durch andere Cursor oder direkt erfolgen, in der momentanen Cursor-Instanziierung sichtbar werden, ist implementierungsabhängig
- Falls UPDATE deklariert 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.
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Wirtsspracheneinbettung und Übersetzung: Prinzipielle Möglichkeiten
Aufruftechnik
- DB-Anweisung wird durch expliziten Funktionsaufruf an das Laufzeitsystem des DBS übergeben, z. B. CALL DBS (‘open C1’)
- Es sind prinzipiell keine DBS-spezifischen Vorkehrungen bei der AP-Übersetzung erforderlich!
- Verschiedene Formen der Standardisierung: Call-Level-Interface (CLI), JDBC
Direkte Einbettung
- keine syntaktische Unterscheidung zwischen Programm- und DB-Anweisungen
- DB-Anweisung wird als Zeichenkette A ins AP integriert, z. B. exec sql open C1
- typischerweise Einsatz eines Vorübersetzers PC (Precompiler)
- PC erzeugt für DB-Anweisungen spezielle Call-Aufrufe im AP, so dass das modifizierte AP mit dem Wirtssprachencompiler C übersetzt werden kann
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Einbettung/Übersetzung: Von der Übersetzung bis zur Ausführung (bei Einsatz eines Vorübersetzers)

GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Einbettung/Übersetzung: Von der Übersetzung bis zur Ausführung
Vorübersetzung des AP
- Entfernung aller Embedded-SQL-Anweisungen 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 DB-Katalog
Übersetzung des AP
- Umwandlung der Anweisungen der höheren Programmiersprache in Maschinencode (Objektmodul) und Abspeicherung in Objektbibliothek
- SQL-Anweisungen für Compiler nicht mehr sichtbar
Binden
- Zusammenfügen der Objektmodule zu lauffähigem Programm
- Hinzufügen des SQL-Laufzeitsystems
Laden und Ausführen
- Laden des ausführbaren Programms in den Speichen
- Anbinden des Zugriffsmoduls aus DB-Katalog und automatische Überprüfung seiner Gültigkeit
- Programmstart
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Einbettung/Übersetzung: Von zentraler Bedeutung
Anfrageauswertung/-optimierung des DBVS ist im wesentlichen für die effiziente Abarbeitung verantwortlich
GDB K8 Anwendungsprogrammierschnittstelle
Einbettung/Übersetzung: Auswertungstechnik: Spektrum von Verfahren mit folgenden Eckpunkten
Maximale Vorbereitung
- 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 geladen und abgewickelt; dabei wird durch Aufrufe des DBVS (genauer: des Zugriffssystems) das Ergebnis abgeleitet
- aufwendige Optimierung und Erstellung eines Zugriffsmoduls
- maximale Auswirkungen von Schemaänderungen, welche die DB-Anweisung betreffen
- Schemaänderungen nach der Übersetzung werden nicht berücksichtigt (neue Zugriffspfade, geänderte Statistiken etc.)
- Invalidierung des Zugriffsmoduls und erneute Erstellung
Keine Vorbereitung
- typisch für Call-Schnittstellen (dynamisches SQL)
- Allgemeines Programm (Interpreter) akzeptiert DB-Anweisungen als Eingabe und erzeugt durch Aufrufe des Zugriffssystems das Ergebnis
- Interpretation einer DB-Anweisung:
- Interpreter wertet Anweisung (als Zeichenfolge) zur Laufzeit aus
- aktueller DB-Zustand wird automatisch berücksichtigt
- sehr hohe Ausführungskosten bei Programmschleifen sowie durch häufige Katalogzugriffe
- interessant vor allem für Ad-hoc-Anfragen bzw. dynamisches SQL
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Einbettung/Übersetzung: Wahl des Bindezeitpunktes
- Wann werden die für die Abwicklung einer DB-Anweisung erforderlichen Operationen vom DB-Schema abhängig?
- Übersetzungszeit vs. Laufzeit

GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
SQL/PSM
PSM: Persistent Stored Modules
zielt auf Leistungsverbesserung vor allem in Client/Server-Umgebung ab
- Ausführung mehrerer SQL-Anweisungen durch ein EXEC SQL
- Entwerfen von Routinen mit mehreren SQL-Anweisungen
erhöht die Verarbeitungsmächtigkeit des DBS
- Prozedurale Erweiterungsmöglichkeiten (der DBS-Funktionalität aus Sicht der Anwendung)
- Einführung neuer Kontrollstrukturen
erlaubt reine SQL-Implementierungen von komplexen Funktionen
- Sicherheitsaspekte
- Leistungsaspekte
ermöglicht SQL-implementierte Klassenbibliotheken (SQL-only)
Vorteile
- vorübersetzte Ausführungspläne werden gespeichert, sind wiederverwendbar
- Anzahl der Zugriffe des Anwendungsprogramms auf die DB wird reduziert
- als gemeinsamer Code für verschiedene Anwendungsprogramme nutzbar
- es wird ein höherer Isolationsgrad der Anwendung von der DB erreicht

GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
SQL/PSM: Prozedurale Spracherweiterungen

GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Dynamisches SQL
Festlegen/Übergabe von SQL-Anweisungen zur Laufzeit
- Benutzer stellt Ad-hoc-Anfrage
- AP berechnet dynamisch SQL-Anweisung
- SQL-Anweisung ist aktueller Parameter von Funktionsaufrufen an das DBVS
Eigenschaften
- Vorbereitung einer SQL-Anweisung kann erst zur Laufzeit beginnen
- 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 (DB2 UDB bewahrt Zugriffspläne zur Wiederverwendung im Cache auf)
- Übersetzung und Code-Generierung ist jedoch prinzipiell möglich!
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Dynamisches SQL: Mehrere Sprachansätze (ähnlicher Funktionalität)
- 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 Java-Programmen 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 Web-Browser auf eine DB zugreifen können
Gemeinsame Anforderungen (LZ)
- Zugriff 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
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Eingebettetes Dynamisches SQL
Eigenschaften
- Abkürzung: EDSQL
- unterstützt mehrere Wirtssprachen
- ist im Stil statischem SQL ähnlich; wird oft von Anwendungen gewählt, die dynamische und statische SQL-Anweisungen mischen
- Programme mit EDSQL sind kompakter und besser lesbar als solche mit CLI oder JDBC
- SQL-Anweisungen werden vom Compiler wie Zeichenketten behandelt; Anweisungen enthalten Platzhalter für Parameter (?) statt Programmvariablen
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Call-Level-Interface
Spezielle Form von dynamischem SQL
- 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-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!
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
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Call-Level-Interface: Wesentlich: Konzept der Handle-Variablen
Handle (internes Kennzeichen) ist letztlich eine Programmvariable, die Informationen repräsentiert, die für ein AP durch die CLI-Implementierung 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, 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
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
SQL-Injection
- Sicherheitslücke bei dynamischem SQL
- Bösartiges Einschleusen von ungewollten SQL-Statments
- Verhinderung durch Prepared Statements
- Statement bereits vorkompiliert
- Nutzereingabe wird vollständig als Abeilungsnummer (Parameter) gewertet (und aufgrund des unpassenden Typs ein Fehler geworfen)
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Zusammenfassung: Cursor-Konzept
Cursor-Konzept zur satz-weisen 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
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Zusammenfassung: Statisches (eingebettetes) SQL
- hohe Effizienz, gesamte Typprüfung und Konvertierung erfolgen durch Precompiler
- relativ einfache Programmierung
- Aufbau aller SQL-Befehle muss zur Übersetzungszeit feststehen
- es können zur Laufzeit nicht verschiedene Datenbanken dynamisch angesprochen werden
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Zusammenfassung: Interpretation einer DB-Anweisung
- allgemeines Programm (Interpreter) akzeptiert Anweisungen der DB-Sprache als Eingabe und erzeugt mit Hilfe von Aufrufen des Zugriffssystems Ergebnis
- hoher Aufwand zur Laufzeit (v.a. bei wiederholter Ausführung einer Anweisung)
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Zusammenfassung: Übersetzung, Code-Erzeugung und Ausführung einer DB-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
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Zusammenfassung: PSM
- zielt ab auf Leistungsverbesserung, vor allem in Client/Server-Umgebung
- erhöht die Verarbeitungsmächtigkeit des DBS
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Zusammenfassung: Dynamisches SQL
- 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)
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Zusammenfassung: 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
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Zusammenfassung: JDBC (ergänzende Information)
bietet Schnittstelle für den Zugriff auf (objekt-) relationale DBS aus Java-Anwendungen
vermeidet einige syntaktischen Mängel (Lesbarkeit, Fehleranfälligkeit) von CLI
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Zusammenfassung: SQLJ (ergänzende Information)
- eingebettete Sprache für „statische” Java-Programme
- zielt auf verbesserte Laufzeiteffizienz im Vergleich zu JDBC ab, Syntax- und Semantikprüfung zur Übersetzungszeit
- größere Unabhängigkeit von verschiedenen SQL-Dialekten