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