2. Datenbank-Programmierung

Werbung
2. Datenbank-Programmierung
Ansätze der Datenbank-Programmierung
2. Datenbank-Programmierung
• SQL ist eingeschränkt bezüglich der algorithmischen Mächtigkeit, z.B. Berechnung
einer transitiven Hülle ist in Standard-SQL nicht möglich.
• Die Einschränkung ist von Bedeutung für die Terminierung, die Endlichkeit von
Ergebnissen und die Optimierbarkeit.
• Für Datenbank-Anwendungen braucht man oft die vollständige Mächtigkeit einer
Programmiersprache. Ansätze hierfür:
– Call-Schnittstelle: Bibliothek für den Zugriff auf die Datenbank
– Einbettung von SQL in eine Wirtssprache
– Erweiterung von SQL um Kontrollstrukturen
– Erweiterung existierender Programmiersprachen zu persistenten Programmiersprachen
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, WS 2012/13
31
2. Datenbank-Programmierung
Ansätze der Datenbank-Programmierung
Prozedurale Schnittstelle / Call-Schnittstelle
• Dem Programmierer wird eine Bibliothek von Prozeduren (bzw. Klassen und Methoden) zur Verfügung gestellt, die den Zugriff und die Manipulation der Datenbank
gewährleisten.
• Keine eigenständige Datenbanksprache, d.h. keine direkte Nutzung von SQL im
Quelltext
• Stattdessen: Die auszuführenden SQL-Anweisungen werden als String-Parameter
über die vordefinierten Prozeduren/Methoden an das Datenbanksystem gegeben.
• Benötigte Softwarewerkzeuge: Compiler der Wirtssprache, Bibliothek/Treiber
• Vertreter: ODBC, JDBC, SQL/CLI (call level interface)
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, WS 2012/13
32
2. Datenbank-Programmierung
Ansätze der Datenbank-Programmierung
Prozedurale Schnittstelle (2)
• SQL-Anweisungen können zur Laufzeit konstruiert werden.
• Aus Sicht der Wirtssprache werden die SQL-Anweisungen in Form von Zeichenketten zur Verfügung gestellt.
• Eine syntaktische und semantische Analyse der SQL-Anweisung findet ebenfalls
erst zur Laufzeit statt.
• Vom Datenbanksystem werden spezifische Prozeduren für die Behandlung variabler Ergebnisrelationen bereitgestellt (Cursor-Konzept, später mehr).
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, WS 2012/13
33
2. Datenbank-Programmierung
Ansätze der Datenbank-Programmierung
Statische Einbettung in eine Wirtssprache
• SQL wird als eigenständige Sprache in eine existierende Sprache (Wirtssprache,
z.B. Java) eingebettet und somit direkt eingesetzt.
• hierzu syntaktische Kennzeichnung der SQL-Anweisungen
• Die Syntax und der Compiler der Wirtssprache wird nicht modifiziert.
• zusätzlich notwendige Softwarewerkzeuge: Precompiler
• Vertreter: Embedded SQL, SQLJ
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, WS 2012/13
34
2. Datenbank-Programmierung
Ansätze der Datenbank-Programmierung
Statische Einbettung (2)
• SQL-Anweisungen werden in den Programmtext eingestreut und syntaktisch gekennzeichnet.
• Ein Precompiler ersetzt die SQL-Anweisungen in Anweisungen für eine prozedurale Schnittstelle der Wirtssprache.
• Schon zur Übersetzungszeit ist eine syntaktische und semantische Analyse
möglich.
• Das vom Precompiler generierte Programm kann anschließend von einem
gewöhnlichen Compiler für die Wirtssprache übersetzt werden.
☞ Die SQL-Anweisungen müssen zur Übersetzungszeit (nahezu) feststehen.
☞ Nur Werte in Ausdrücken der Where-Klausel sind variabel.
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, WS 2012/13
35
2. Datenbank-Programmierung
Ansätze der Datenbank-Programmierung
Prozedurale Spracherweiterung von SQL
• SQL wird um Konzepte einer Programmiersprache erweitert: Variable, Kontrollstrukturen, etc..
• Vorteil: engere Verbindung mit SQL möglich, Übernahme des SQL-Typsystems,
kein Impedance Mismatch
• Nachteil: es muss eine komplett neue Sprache gelernt werden
• dedizierte Softwarewerkzeuge sind notwendig
• Vertreter: PL/SQL (und dessen Nachbauten, z.B. bei IBM DB2 oder Postgres)
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, WS 2012/13
36
2. Datenbank-Programmierung
Ansätze der Datenbank-Programmierung
Cursor-Konzept
• Gewöhnliche Programmiersprachen bieten zwar Strukturen aber keine Mengen als
Datentyp an.
• Eine Ergebnisrelation in SQL ist aber eine Menge von Tupeln.
☞ Das Ergebnis einer SQL-Anfrage kann nicht direkt in einen Wert eines Datentyps
der Wirtssprache abgebildet werden (Impedance Mismatch).
• Das Konzept des Cursors bietet eine abstrakte Sichtweise auf eine Ergebnisrelation.
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, WS 2012/13
37
2. Datenbank-Programmierung
Ansätze der Datenbank-Programmierung
Cursor
Anwendungsprogramm
☞ Ein Cursor stellt eine Art Zeiger auf die Zeilen einer Ergebnisrelation dar.
Datenbank
SQL−Anfrage
C++
Cursor
Ergebnisrelation
☞ Ein gutes Bild ist es, sich den
Cursor als einzeiliges Fenster
auf die Ergebnisrelation vorzustellen.
☞ Dieses Fenster wird schrittweise über die Ergebnisrelation geschoben.
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, WS 2012/13
38
2. Datenbank-Programmierung
Ansätze der Datenbank-Programmierung
Cursor-Anweisungen nach SQL-Standard
DECLARE CURSOR: Mit einer Cursordeklaration wird u.a. der Name des Cursors
und die zugehörige Cursortabelle (Ergebnisrelation) definiert.
DECLARE Cursorname [SCROLL] CURSOR [WITH HOLD]
FOR Abfrageausdruck [ORDER BY-Klausel ] [Modifikationsklausel ]
Modifikationsklausel:
FOR READ ONLY |
UPDATE [OF Spaltenname {, Spaltenname }]
Beispiel:
declare caddr cursor for
select customer_id, name
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, WS 2012/13
39
2. Datenbank-Programmierung
Ansätze der Datenbank-Programmierung
from customer
where address = ’Stanford’
• Der Abfrageausdruck (Cursorformel) ist der wichtigste Bestandteil einer CursorAnweisung. Er legt die Cursortabelle fest.
• Durch SCROLL stehen zusätzliche Positionierungsmöglichkeiten des Cursors bei
FETCH INTO zur Verfügung. Nur in Zusammenhang mit READ ONLY möglich.
Ohne SCROLL: nur sequentieller Durchlauf
• WITH HOLD: Cursor bleibt über ein COMMIT hinaus im geöffneten Zustand.
OPEN CURSOR: Berechnung der Ergebnisrelation
OPEN Cursorname
Beispiel:
open caddr
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, WS 2012/13
40
2. Datenbank-Programmierung
Ansätze der Datenbank-Programmierung
FETCH INTO: Positioniert den Cursor auf ein bestimmtes Tupel der Cursortabelle und
überträgt die Attributwerte dieses Tupels in Variablen der Wirtssprache.
FETCH [[FETCH-Orientierung ] FROM] Cursoname
INTO Zielspez {, Zielspez }
FETCH-Orientierung:
NEXT | PRIOR | FIRST | LAST |
ABSOLUTE wert | RELATIVE wert
fetch caddr into :cid, :name
cid und name sind hier Hostvariablen, d.h. Variablen der Wirtssprache, die zur Aufnahme von Werten aus der Datenbank dienen.
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, WS 2012/13
41
2. Datenbank-Programmierung
Ansätze der Datenbank-Programmierung
UPDATE CURRENT: Ändern des aktuellen Tupels
UPDATE Relationenname
SET-Klausel
WHERE CURRENT OF Cursorname
DELETE CURRENT: Löschen des aktuellen Tupels
DELETE FROM Relationenname
WHERE CURRENT OF Cursorname
CLOSE: Freigabe der Ergebnisrelation
CLOSE Cursorname
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, WS 2012/13
42
2. Datenbank-Programmierung
JDBC
JDBC
Auf separaten Folien!
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, WS 2012/13
43
Herunterladen