DBS: Anwendungsprogrammierung

Werbung
DBS: Anwendungsprogrammierung
•
Bisher: Grundlagen / Theorie
Daten
Benutzer 1
Schema
Datenbank 1
Benutzer 2
DBMS
Daten
Benutzer n
Schema
Datenbank
ate ba 2
•
Hier: Idee der Praxis
Benutzer
Datenbanksysteme
Anwendungskontrollkomponenten (AC)
Visuelle Objekte
Visuelle Objekte
AC_Auftrags.
Auftrags‐
Auftrags
Kunden‐
Kunden
daten
daten
Auftrags‐
bearbeitung
Prozessobjekte
Business‐Komponenten (BC)
( )
Infrastrukturkomponenten (IC)
BC_Kunde
IC_DB
BC_Auftrag
IC_TX
11. VL Datenbanksysteme, Prof. Jasper
1
DBS: Anwendungsprogrammierung
•
Vorgehen beim Zugriff auf DB (Server) aus Anwendungprogrammen (Client):
1.
2.
3.
•
•
•
Client öffnet einen Kanal (open connection) zu der Datenbank
Client stellt Anfragen an die DB und/oder
Client stellt
an die DB und/oder sendet updates (als
updates (als Oberbegriff für
insert/update/delete) an die Datenbank
Falls Zugriff auf die DB nicht mehr benötigt, schließt der Client den Kanal (close connection)
Nutzung der DB aus Programmen: Embedded SQL in universellen Programmiersprachen (H t S
(Host‐Sprachen) wie COBOL, C, Java, …
h ) i COBOL C J
Das eingebettete SQL wird durch Klammerung EXEC SQL BEGIN … EXEC SQL END oder ähnlich in den Programmen kenntlich gemacht (unterschiedlich für die verschiedenen H
Host‐Sprachen)
S
h )
Kommunikation i.d.R. über gemeinsame Variablen (shared variables), üblicherweise mit einem Doppelpunkt (:) als Präfix in SQL kenntlich gemacht
11. VL Datenbanksysteme, Prof. Jasper
2
DBS: Embedded SQL: Connections
•
Kanal (Connection) mehrfach möglich aber nur eine zu einem Zeitpunkt in einem
Programm aktiv
•
Befehle: – Öffnen eines Kanals: Kanals:
CONNECT TO server-name AS connection-name
AUTHORIZATION user-account-info;
– Ä
Änderen des aktiven Kanals:
SET CONNECTION connection-name;
– Schließen des Kanals:
DISCONNECT connection-name;
11. VL Datenbanksysteme, Prof. Jasper
3
DBS: Embedded SQL in C
•
Variablen
V
i bl innerhalb
i
h lb eines
i
DECLARE S
DECLARE‐Statements werden
d gemeinsam
i
genutzt und können
d kö
(mit Doppelpunkt als Präfix) in SQL‐Befehlen auftreten
SQLCODE liefert Fehler bzw. Ausnahmen bei der SQL‐Abarbeitung
•
Beispiel:
•
int loop;
EXEC SQL BEGIN DECLARE SECTION;
varchar
h
N N
N_Name[16],
[16] V_Name[16],
V N
[16] Adresse[100];
Ad
[100]
char P_ID[10], Geb_Dat[11], …;
int Abt_Nr, Gehalt, SQLCODE, …;
EXEC SQL
Q END DECLARE SECTION;
loop = 1;
while (loop) {
prompt (“Eingabe Personen-Identifikator:“, P_ID);
EXEC SQL
select V_Name,
V Name N_Name,
N Name Adr,
Adr Gehalt
into
:V_Name, :N_Name, :Adresse, :Gehalt
from
Personal
where P-ID = :P_ID;
if (SQLCODE == 0) printf(V_Name,
printf(V Name, …);
else printf(“Personen-Identifikator existiert nicht:“, P_ID);
prompt(“Weitere Personen? (1=ja, 0=nein): “, loop);
END-EXEC
}
11. VL Datenbanksysteme, Prof. Jasper
4
DBS: Embedded SQL in prozeduralen Sprachen
•
Cursor‐Konzept:
C
K
– Für mengenwertige Antworten wird ein Cursor definiert, der als Iterator für die Menge
funktioniert
– Minimale Funktionalität
• DECLARE: Deklaration über SFW‐Klausel
• OPEN: Führt das SQL‐Statement aus und setzt Iterator auf das erste Element
• FETCH: Holt das aktuelle Element und setzt den Iterator weiter
• CLOSE: Schließt
CLOSE: Schließt den Cursor
den Cursor
• Ergänzungen z.B. RESET
–
Beispiel: PL/1 für DB2
...
11
EXEC SQL DECLARE BUECHER CURSOR FOR
12
SELECT AUTOR, TITLE, PREIS
13
FROM BUCH
14
WHERE PREIS > :MIN;
MIN
…
17
EXEC SQL OPEN BUECHER,
18
WEITERE_BUECHER := '1'B,
19
DO WHILE (WEITERE_BUECHER);
(WEITERE BUECHER)
20
EXEC SQL FETCH BUECHER INTO :AUTOR, :TITEL, :PREIS;
21
IF SQLCODE = 100
22
THEN WEITERE_BUECHER := '0'B;
23
ELSE PUT SKIP LIST (AUTOR,
(AUTOR TITEL,
TITEL PREIS);
PREIS)
24
END;
25
EXEC SQL CLOSE BUECHER;
11. VL Datenbanksysteme, Prof. Jasper
5
DBS: Embedded SQL in Java
• SQLJ: Ein Standard für SQL in Java
• Ein SQLJ‐Übersetzer transformiert SQL‐Befehle in Java‐Code
• Die übersetzten Befehle werden durch die JDBC‐Schnittstelle
ausgeführt
• JDBC ist eine Bibliothek für Java um auf Datenbanken zuzugreifen
• Dazu müssen entsprechene Klassen importiert werden: z.B. j
java.sql
l
• Ein Java‐Programm mit JDBC kann jede beliebige Datenbank nutzen, die über eine JDBC‐Treiber
die über
JDBC Treiber verfügt
• Über JDBC kann ein Programm gleichzeitig mehrere Datenbanken
nutzen
11. VL Datenbanksysteme, Prof. Jasper
6
DBS: Embedded SQL in Java
• Vorgehen Datenbankzugriff über JDBC
1. Importiere die JDBC:Bibliothek (java.sql.*)
2 L d d JDBC T ib Cl f
2. Lade den JDBC‐Treiber: Class.forname(“oracle.jdbc.driver.OracleDriver”)
(“
l jdb d i O l D i ”)
3. Vereinbare die notwendigen Variablen
4. Definiere ein Connection
4. Definiere
Connection‐Objekt
Objekt (mit getConnection)
5. Definiere ein Befehls‐Objekt aus der Befehlsklasse, entweder aus
PreparedStatement oder aus
Callable Statement
6. Identifiziere die Parameter des Befehls (gekennzeichnet durch “?”)
7 Bi d Befehls‐Variabeln
7. Binde
B f hl V i b l an Programm‐Variablen
P
V i bl
8. Führe den SQL‐Befehl (das Objekt) aus mit JDBC executeQuery
9. Bearbeite das Ergebnis
9. Bearbeite
das Ergebnis der Abfrage (wird als 2
2‐dimensionale
dimensionale Tabelle
Tabelle vom Typ
ResultSet geliefert)
11. VL Datenbanksysteme, Prof. Jasper
7
DBS: Embedded SQL in Java
•
Beispiel:
pid = readEntry(“Gebe Personal-ID ein: ");
try {
#sql{select V_Name, N_Name, Adr, Gehalt
into :vname, :nname, :adresse, :gehalt
from PERSONAL where P_ID = :pid};
p };
}
catch (SQLException se) {
System.out.println(“Personen-Id
System.out.println(
Personen Id existiert nicht:
nicht:",+pid);
,+pid);
return;
}
System out println(vname + " " + nname + … );
System.out.println(vname
•
•
SQLJ unterstützt 2 unterschiedliche Iteratoren:
– Benannte Iteratoren: diese sind mit dem Ergebnis einer Anfrage verknüpft
– Positionsiteratoren: listen die Attributtypen eines Anfrageergebnisses auf
Eine FETCH‐Operation liefert das nächste Tupel eines Anfrageergebnisses:
fetch iterator‐variable into programm‐variable
11. VL Datenbanksysteme, Prof. Jasper
8
DBS: Dynamisches SQL
•
•
•
•
Ziel: Zusammenstellung und Ausführung von (nicht vorübersetzten) SQL Befehlen
zur Laufzeit
– Die Befehle
Die Befehle werden interaktiv zur Laufzeit eingegeben oder
– Eine grafische Benutzungsoberfläche erlaubt den Zusammenbau von SQL‐
Befehlen
Dynamische Updates sind einfach
Dynamische Abfragen können sehr komplex werden, da Anzahl und jeweiliger Typ
der abgefragten Attribute zum
Attribute zum Übersetzungszeitpunkt unbekannt sind
Beispiel:
EXEC SQL BEGIN DECLARE SECTION;
varchar sqlupdatestring[256];
EXEC SQL END DECLARE SECTION;
…
prompt (“Gebe SQL-Befehl ein:“, sqlupdatestring);
EXEC SQL PREPARE sqlcommand FROM :sqlupdatestring;
EXEC SQL EXECUTE sqlcommand;
11. VL Datenbanksysteme, Prof. Jasper
9
DBS: Zugriff über API
• Dynamische DB‐Programmierung mit einer Funktionsbibliothek
(API)
–
–
–
–
–
–
Vorteil: Keine
V
t il K i Vorübersetzung
V üb
t
notwendig
t
di und damit
d d it flexibler
fl ibl
Nachteil: Syntx‐Check muss zu Laufzeit erfolgen
Ist im SQL
SQL‐Standard
Standard vorgesehen
vorgesehen
Einfacher Zugriff auf mehere Datenbanken aus einem Programm
Bestimmte Bibliotheken (z.B. sqlcli.h für C) müssen installiert sein
SQL‐Befehle werden dynamisch erzeugt und als Zeichenketten übergeben
– Komponenten von SQL/CLI:
•
•
•
•
EEnvironment record: Verwaltet
i
d V
l die DB‐Connections (Connection‐Pool)
di DB C
i
(C
i P l)
Connection record: Für jede Connection die notwendigen Informationen
Statement record: Für jeden SQL‐Befehl die notwendigen Informationen
Description record: Für jeden Befehl die menge der Tupel
11. VL Datenbanksysteme, Prof. Jasper
10
DBS: Zugriff über API (C)
• Vorgehen
1.
2
2.
3.
4.
5.
6.
7
7.
8.
9.
10
10.
Lade SQL/CLI Bibliotheken
Vereinbare Variablen um Records für
um Records für die oben
die oben genannten Komponenten zu
verwalten (Benennung: SQLHSTMT, SQLHDBC, SQLHENV, SQLHDEC)
Initialisiere einen Umgebungs‐Record mit SQLAllocHandle
Initialisiere einen Connection
Connection‐Record
Record mit
mit SQLAllocHandle
Initialisiere einen Befehls‐Record mit SQLAllocHandle
Bereite den SQL‐Befehl mit der Funktion SQLPrepare vor
Binde die Parameter mit
die Parameter mit Programmvariablen
Führe den SQL‐Befehl mit SQLExecute aus
Verknüpfe Attribute der Abfrage mit Variablen in C mittels SQLBindCol
N t SQLFetch
Nutze
SQLF t h um die Attributwerte
di Att ib t
t des jeweils
d j
il nächsten
ä h t Tupels
T l in die C‐
i di C
Variablen zu laden
11. VL Datenbanksysteme, Prof. Jasper
11
DBS: Funktionalität IN Datenbanken
•
Stored Procedures
– Persistente Prozeduren und Funktionen (Module) existieren in der DB und werden vom DBMS (vom Server, nicht vom Client) ausgeführt
– Vorteile:
l
• Vermeidet Redundanz, wenn viele Anwendungen diese Funktionalität benötigen
• Reduziert Kommunikationsaufwand, da nur im Server ausgeführt
• Damit können auch komplexere Views definiert werden
– Nachteil
• Stored Procedures zwar inzwischen genormt, dennoch existieren große Unterschiede zwischen den Produkten: Portabilität
i h d
d k
bili ä
– Genereller Aufbau einer Stored Procedure
CREATE PROCEDURE procedure‐name (params)
l l d l ti
local‐declarations
procedure‐body;
– Genereller Aufbau einer Stored Function
CREATE FUNCTION fun name (params) RETRUNS return type
CREATE FUNCTION fun‐name (params) RETRUNS return‐type local‐declarations
function‐body;
– Aufruf einer Prozedur oder Funktion:
• CALL procedure‐name/function‐name (Argumente);
11. VL Datenbanksysteme, Prof. Jasper
12
DBS: Funktionalität IN Datenbanken
•
SQL/PSM: Teil des SQL(>:1999)‐Standards für persistente Module (persistent stored modules)
– SQL + Stored Procedures/Functions + zusätzliche prozedurale Kontrollstrukturen
– Erweitert die Mächtigkeit von SQL zu einer vollständigen Programmiersprache
– Beispiel SQL/PSM:
Beispiel SQL/PSM:
CREATE FUNCTION Abteilungsgroesse(IN AbtNr INTEGER)
RETURNS VARCHAR[7]
DECLARE Anz_Mitarb INTEGER;
SELECT COUNT (*) INTO Anz_Mitarb
FROM SELECT Personal WHERE Abt_Nr = AbtNr;
IF Anz_Mitarb
A
Mit b > 100 THEN RETURN “sehr
“ h gross”
”
ELSEIF T Anz_Mitarb > 50 THEN RETURN “gross”
ELSEIF TOT_EMPS > 30 THEN RETURN “mittel”
ELSE RETURN “klein”
ENDIF;
11. VL Datenbanksysteme, Prof. Jasper
13
DBS: Aufbau/Funktionen von DBMS
Anwendungs‐
programme
(Logische)
Datenstrukturen
((Logische) Zugriffs‐
h )
ff
pfadstrukturen
SSpeicherungs‐
i h
strukturen
Mengenorientierte
Schnittstelle
Relationen, Sichten, Tupel
Satzorientierte
Schnittstelle
Externe Sätze, Indexstrukturen
Interne Satz‐
schnittstelle
Interne Sätze, Bäume, Hash
Systempuffer‐
schnittstelle
Segmente, Seiten
Datei‐
schnittstelle
Dateien, Blöcke
Geräte
schnittstelle
Spuren, Zylinder, Kanäle
Seitenzuordnung
Speicherzuordnung
Externer
Speicher
11. VL Datenbanksysteme, Prof. Jasper
14
Herunterladen