Datenbank und Informationssysteme Inhaltsverzeichnis 1 Programmierung von Datenbankzugriffen 1.1 Architektur des SQL/CLI am Beispiel JDBC . . . . . 1.2 SQl-Anweisungen und Ergebnismengen . . . . . . . . . 1.3 Metainformationen und adaptives Programmieren . . . 1.4 Architektur von ADO.NET . . . . . . . . . . . . . . . 1.5 Speicherresidente Datenbankstrukturen mit ADO.NET 1.6 Objekt-Relationales Mapping am Beispiel Hibernate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 5 9 12 15 15 15 2 Transaktionen und Nebenläufigkeitskontrolle 2.1 Eigenschaften und Verwendung von Transaktionen 2.2 Serialisierbarkeit und Nebenläufigkeitskontrolle . . 2.3 Isolationslevel in SQL-Datenbanksystemen . . . . . 2.4 Strategien der Nebenläufigkeitskontrolle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 15 15 15 15 . . . . . 15 15 15 15 15 15 3 Verteilte Datenbanken 3.1 Architektur verteilter Datenbanken . . . . . 3.2 Datenspeicherung in verteilten Datenbanken 3.3 Verteilte Anfragen . . . . . . . . . . . . . . 3.4 Änderung verteilter Daten und Replikation 3.5 Verteilte Transaktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Datenbanksicherheit und Autorisierung 15 4.1 Autorisierung und Zugriffskontrolle . . . . . . . . . . . . . . . . . . . . . . . . . 16 4.2 Techniken zum Recovery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 5 Datenanalyse zur Entscheidungsfindung 16 5.1 Data-Warehouses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 5.2 Data-Mining . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1 Rami Swailem FH Gießen-Friedberg 6 Neue Datenbanktechnologien 6.1 XML und Datenbanken . . 6.2 Temporale Datenbanken . . 6.3 Geografische Datenbanken . 6.4 Logik-basierte Datenbanken DB2_Mitschrift.tex,v,1.1,November 4, 2006 at 11:37:11 CET WS 06/07 DB2 Mitschrift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 16 16 16 16 Seite 2 Rami Swailem FH Gießen-Friedberg DB2 Mitschrift 1 Programmierung von Datenbankzugriffen Situation: *S Backend Frontend Anwendung DB-Server SQL myProg *C Ergebnismengen DBMS Daten *R Beispiel 1.1 Die Grundstruktur des Datenbankzugriffs mit JDBC besteht in sechs Schritten. Listing 1: JDBC-Abfrage 1 import j a v a . s q l . ∗ ; 3 public c l a s s BasicJDBC { 5 7 public s t a t i c void main ( S t r i n g [ ] a r g s ) { Connection con = nu ll ; Statement stmt = nu ll ; R e s u l t S e t r s = nu ll ; 9 try { 11 DB2 /∗∗ S c h r i t t 1 : Treiber r e g i s t r i e r e n ∗/ C l a s s . forName ( " sun . j d b c . odbc . JdbcOdbcDriver " ) ; 13 /∗∗ S c h r i t t 2 : Connection zur Datenbank h e r s t e l l e n ∗/ 15 con = DriverManager . g e t C o n n e c t i o n ( " j d b c : odbc : azamon " , " d i s " , " ∗∗∗∗∗ " ) ; } Mitschrift.tex,v,1.1,November 4, 2006 at 11:37:11 CET 17 /∗∗ S c h r i t t 3 : Satement erzeugen ∗/ 19 stmt = con . c r e a t e S t a t e m e n t ( ) ; 21 /∗∗ S c h r i t t 4 : Anweisung d i r e k t ausfuehren ∗/ r s = stmt . ex ecuteQ uery ( " s e l e c t author , t i t l e from Books " ) ; 23 /∗∗ S c h r i t t 5 : Ergebnis verwenden ∗/ 25 27 while ( r s . ne x t ( ) ) { System . out . p r i n t l n ( r s . g e t S t r i n g ( " a u t h o r " ) + " " + rs . getString ( " t i t l e " ) ); WS 06/07 Seite 3 Rami Swailem FH Gießen-Friedberg DB2 Mitschrift } 29 31 } catch ( E x c e p t i o n e ) { e . p r i n t S t a c k T r a c e ( ) ; } try { finally { /∗∗ S c h r i t t 6 : Nicht mehr benoetigte Resourcen f r e i g e b e n ∗/ i f ( r s != nu ll ) r s . c l o s e ( ) ; i f ( stmt != nu ll ) stmt . c l o s e ( ) ; i f ( con != nu ll ) con . c l o s e ( ) ; 33 35 } catch ( E x c e p t i o n e ) { e . p r i n t S t a c k T r a c e ( ) ; } 37 } 39 } 41 } Es sind sechs Schritte, die die Grundstruktur eines JDBC-Programms bilden: 1. Treiber registrieren Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") Mit der klassenglobalen Funktion forName von Class wird das Class-Objekt Jdbc-OdbcDriver erzeugt, in unserem Fall die so genannten JDBC-ODBC-Bridge. Diese tr“agt sich im statischen Treiberregister von JDBC ein. Mit diesem Schritt eröffnen wir uns den Zugriff auf ein Objekt, den Treiber, der den Datenzugriff auf eine Datenquelle durchfhren kann. 2. Connection zur Datenbank herstellen Connection con = DriverManager.getConnection() Der JDBC-Treibermanager DriverManager ist ein Singleton, sein Konstruktor ist privat und alle seine Methoden sind statisch, also klassenglobal. Er verwendet die JDBC URL (in unserem Fall jdbc:odbc:azamon), bietet sie jedem registrierten Treiber an, bis sich der erste findet, der zu dieser URL eine Connection herstellen kann. Der Treiber instantiiert ein Objekt der Klasse Connection, das der Treibermanager der Anwendung bergibt. (Danach spielt der Treibermanager gar keine Rolle mehr, es ist das Connection-Objekt, das für die Anwendung die Verbindung zur Datenquelle repräsentiert.) 3. Statement erzeugen DB2_Mitschrift.tex,v,1.1,November 4, 2006 at 11:37:11 CET Statement stmt = con.createStatement() Das Objekt der Klasse Statement wird von der Connection erzeugt; es wird verwendet, um SQL-Anweisungen an die Datenquelle zu richten. 4. Anweisung ausfhren und Ergebnismenge erzeugen ResultSet rs = stmt.executeQuery(...) Die SQL-Anweisung wird ausgefhrt und die Methode executeQuery liefert eine Referenz auf die Ergebnismenge zurck. Die Klasse ResultSet repräsentiert die Ergebnismenge einer SQL-Anweisung und hat Methoden, mit denen der (implizite) Cursor auf der Ergebnismenge bewegt wird und mit denen die Werte aus der Ergebnismenge gelesen werden. Im einfachsten (und im Default) Fall hat das Objekt rs einen Cursor, der schrittweise vorwärts ber die Zeilen des Ergebnisses bewegt werden kann. WS 06/07 Seite 4 Rami Swailem FH Gießen-Friedberg DB2 Mitschrift 5. Ergebnis verwenden while ( rs.next() ) {... Die Methode next() der ResultSet positioniert den Cursor zunächst auf die erste Zeile der Ergebnismenge, und bewegt ihn dann mit jeder Iteration ber die folgenden Zeilen. Mit den Methoden getXXX(), in unserem Fall getString(), können die Werte der Spalten aus der aktuellen Zeile der Ergebnismenge gelesen werden. Als Parameter der GetMethoden kann man den Namen der Spalte oder auch ihre Position (bei 1 beginnend) angeben. JDBC ist sehr komfortabel was die Konvertierung der Datentypen angeht – in der JDBC-Dokumentation geben Listen Auskunft ber die möglichen Konversionen. 6. Nicht mehr benötigte Resourcen freigeben rs.close() ... Sicherlich würde auch schlussendlich der GarbageCollector von Java die Objekte vernichten und in diesem Zuge die entsprechende Methode close() aufrufen. Auch wenn ein bergeordnetes Objekt vernichtet wird, ruft JDBC die entsprechenden Funktionen der untergeordneten Objekte auf. Herr Renz hat gleichwohl bewusst im Beispiel die ganze Reihung der CloseMethoden explizit angegeben, um auf folgenden Punkt aufmerksam zu machen: Die GarbageCollection von Java kann keine Ahnung davon haben, wie externe Resourcen verwaltet werden, Resourcen, die die Datenbank oder etwa ein ODBC-Treiber bereitstellt. Infolgedessen kann es auch keinen Mechanismus geben, der den geeigneten Zeitpunkt automatisch ermittelt, zu dem diese Resourcen freigegeben werden sollten. Es ist also guter Stil in einem JDBC-Programm, nicht mehr benötigte Resourcen selbst freizugeben. 1.1 Architektur des SQL/CLI am Beispiel JDBC Zwei grundlegende Techniken des Zugriffs: 1. SLI: Statement Level Interface (embedded/eingebettetes SQL) 2. CLI: Call LevelInterface SLI am Beispiel SQLJ: Prinzip: SQL-Anweisung als „Teil“ unseres Codes Listing 2: sli-Beispiel.java DB2_Mitschrift.tex,v,1.1,November 4, 2006 at 11:37:11 CET 1 3 5 ... s t r i n g i s b i n = new s t r i n g ( " 3 − 4 5 8 . . . " ) ; . . . #s q l {SELECT author , t i t l e INTO : a u t h o r : t i t l e FROM Books WHERE i s b n =: i s b n } .... Dieser Code steht in einer „.SQLJ“-Datei. Der SQLJ-Translator erzeugt daraus eine .java- und eine .ser-Datei. Der Java-Compiler erzeugt aus dem .java-Code eine ausfhrbare Java-Klasse .class. Bei der Ausfhrung greift die Klassendatei auf den vorbereiteten SQL-Ausfhrungsplan aus der .ser-Datei zu, der in der Datenbank vorgehalten wird ⇒ statisches SQL. WS 06/07 Seite 5 Rami Swailem FH Gießen-Friedberg DB2 Mitschrift file.sqlj SQL-Translator file.java file.ser javac enthält vorcompilierten Zugriffsplan des DBMS für alle #SQL-Anweisungen in file.sqlj file.class file.ser SQLJ Run-Time Statisches SQL Erstellen des Zugriffsplan des DBMS zur Compilierzeit. Vorteil: Zugriffsplan steht bei der Ausfhrung schon fertig zur Verfgung, Ausfhrung dadurch etwas schneller. Nachteil: Hohe Kopplung an die Datenbank, Datenbank muß beim Compilieren verfgbar sein. Dynamisches SQL Erstellen des Zugriffsplans des DBMS zur Ausfhrungszeit. Nachteil: Zugriffsplan muß zur Ausfhrungszeit berechnet werden. (kann optimiert werden) Vorteil: Unter Umständen kann das DBMS jederzeit ohne Anpassung des Codes gewechselt werden. Außerdem Vorteil SLI: Meist statisches und dynamisches SQL möglich. CLI: Call Level Interface Beispiel: ODBC C/C++ JDBC Java ADO.NET C# sind Implementierungen von SQL/CLI = Teil des SQL-Standards. DB2_Mitschrift.tex,v,1.1,November 4, 2006 at 11:37:11 CET Aufbau JDBC: • Java-Anwendung kommuniziert mit (DBMS-unabhängigem) JDBC-Treibermanager. (java.sql.*) • Treibermanager kommuniziert mit DBMS-abhängigem JDBC-Treiber. • Spezifischer JDBC-Treiber kommuniziert mit seinem DBMS. WS 06/07 Seite 6 Rami Swailem FH Gießen-Friedberg DB2 Mitschrift Die Java-Anwendung sendet SQL-Anweisungen an JDBC und erhält Ergebnismengen zurck. Java-Anwendung SQL Ergebnismengen DBMS-unabhängig JDBC (Treibermanager) java.sql.* JDBCTreiber Oracle JDBCTreiber mySQL JDBCTreiber DB2 DBMS-spezifisch DBServer DBServer DBServer Oracle mySQL DB2 Aufbau ODBC äuivalent. Problem: SQL-Dialekte in den DBMS machen die DBMS-unabhängikeit wieder schwieriger, Dialekte und spezielle Features sollten nach Möglichkeit vermieden werden. 4 Arten von JDBC-Treibern: Die Unterschiede ergeben sich durch die verschiedenen Typen der JDBC-Treiber, die in der Abbildung skizziert sind. Java-Anwendung JDBC-Treibermanager Client Treiber vom: DB2_Mitschrift.tex,v,1.1,November 4, 2006 at 11:37:11 CET WS 06/07 Client JDBCODBCBridge Naiver APITreiber ODBC ClientDB-Lib ClientDB-Lib Typ 1 Client JDBC NetTreiber Client Naiver ProtokollTreiber DBMiddleware Typ 2 Typ 3 Typ 3 Seite 7 Rami Swailem FH Gießen-Friedberg DB2 Mitschrift Typ 1: JDBC-ODBC-Bridge (sun.jdbc.odbc.JdbcOdbcDriver) Typ 2: Native API-Treiber Typ 3: JDBC-Net-Treiber Typ 4: Nativer Protokoll-Treiber Typen von JDBC-Treibern 1. Treiber vom Typ 1 implementieren die JDBC API durch das Mapping der Funktionen auf eine andere SQL CLI, die nicht in Java geschrieben ist. In der Regel handelt es sich dabei natrlich um ODBC, d.h. Treiber vom Typ 1 sind eine JDBC-ODBC-Bridge. Ein solcher Treiber ist Bestandteil von SUNs JDK. Der Vorteil dieser Technik besteht darin, dass man vorhandene und installierte ODBC-Funktionalität sofort nutzen kann – es stand somit von der ersten JDBC-Version an der Zugriff auf nahezu alle denkbaren Datenquellen zur Verfgung. Der große Nachteil liegt darin, dass ODBC nicht für Applets genutzt werden kann, weil ODBC die Sicherheitsrestriktionen für Applets verletzt. 2. Treiber vom Typ 2 beruhen auf den Datenbankspezifischen Schnittstellen, d.h. sie verwenden die (in der Regel in C geschriebenen) Low-Level-APIs des jeweiligen DatenbankHerstellers. Bezglich der Applets verbessert sich die Lage gegenber der JDBC-ODBC-Bridge dadurch natrlich nicht. 3. Treiber vom Typ 3 sind rein in Java geschrieben und kommunizieren ber ein Datenbankunabhängiges Netzprotokoll mit einer Middleware-Komponente, die auf dem Server installiert ist. Diese Komponente fhrt dann den eigentlichen DatenbankZugriff durch. Um ein Beispiel zu nennen: Easysoft bietet eine JDB-CODBC-Bridge vom Typ 3 an. Auf Client-Seite wird ein reiner Java-Treiber verwendet, der mit dem UDP-Protokoll (user datagram protocol) via TCP/IP mit dem Server spricht. Serverseitig werden nun die Anfragen des JDBC-Treibers in ODBC-Anfragen transformiert und ODBC fhrt dann den eigentlichen Datenzugriff weiter. DB2_Mitschrift.tex,v,1.1,November 4, 2006 at 11:37:11 CET 4. Treiber vom Typ 4 sind rein in Java geschrieben und kommunizieren mit dem Datenbank-Server ber sein Netzprotokoll. D.h. der Java-JDBC-Treiber tritt an die Stelle des Datenbank-Clients und wickelt die Kommunikation mit dem Server direkt ab. Ein Beispiel für einen Treiber dieses Typs ist jConnect von Sybase. Der JDBC-Treiber jConnect verwendet das Protokoll TDS (tabular data stream) von Sybase und richtet so seine Anfragen direkt an den Datenbank-Server. Treiber vom Typ 4 versprechen die beste Performance. Treibermanager • Registrieren und Laden von Treibern • Herstellen der Verbindung zur DB • Konfiguration der Verbindung • Delegation an JDBC-Treiber WS 06/07 Seite 8 Rami Swailem FH Gießen-Friedberg DB2 Mitschrift 1. Registrieren und Laden von Treibern Methode 1: Explizites Laden der Treiberklasse: 1 C l a s s . forName ( o r g . p o s t g r e s . D r i v e r ) Methode 2: properties-Datei: 1 j d b c . d r i v e r s=o r g . p o s t g r e s . D r i v e r , . . . Methode 3: Systemeigenschaft (Parameter beim Aufruf): 1 j a v a −D j d b c . d r i v e r s = . . . . MyClass Methode 4: (neu in JDBC 4.0) automatisches Laden bei getConnection anhand URL 2. Herstellen der Verbindung zur Datenbank Methode 1: DriverManager.getConnection(url,uid,pwd) jdbc:<subprotocol>:<subname> z. B.: 1 j d b c : odbc : azamon /∗= DSN i n ODBC∗/ j d b c : p o s t g r e s q l : / / h o s t : p o r t / d a t a b a s e /∗= URL d e r DB a u f postgreSQL− S e r v e r ∗/ Methode 2: Verwenden einer DataSource Vorteil: Nur der Name muß bekannt sein, keine Ports etc.. Schritt 1: Der Anbieter einer Datenquelle registriert DataSource bei JNDI← Namensdienst Schritt 2: Der Verwender holt sich eine Connection bei der DataSource 2 DataSource ds = ( DataSource ) new I n i t i a l C o n t e x t ( ) . look u p ( "Name d e r Datenquelle " ) ; Connection con = ds . g e t C o n n e c t i o n ( ) ; DB2_Mitschrift.tex,v,1.1,November 4, 2006 at 11:37:11 CET 1.2 SQl-Anweisungen und Ergebnismengen s e l e c t author , t i t l e from Books where ISBN= ’ 3 . . . ’ WS 06/07 Seite 9 Rami Swailem FH Gießen-Friedberg DB2 Mitschrift 1 SQL-Gramatik Parsen Systemkatalog Validieren Optimieren 2 UTE EXEC T C E DIR 3 ARE PREP ED STOR DUE C O PR eugen z RE er t t aufzei ur Laufzei zur L z binärer Zugriffsplan erzeugen Zugriff durchführen UTE EXEC t, aufzei zur L h durchac mehrf ar b führ ED STOR DUE C PRO en rwend e v RE Methode 1: 1 Statement stmt = con . c r e a t e S t a t e m e n t ( ) ; R e s u l t S e t r s = stmt . ex ecuteQuery ( " s e l e c t author , t i t l e from Books where ISBN = ’ 3 . . . ’ " ) ; Methode 2: Parametrisierte Anweisung P repare dStateme nt pstmt = con . p r e p a r e S t a t e m e n t ( " s e l e c t author , t i t l e from Books where ISBN = ? " ) ; PreparedStatement wird vom DBMS bei prepareStatement(...) vorbereitet/bearbeitet und zwischengespeichert 1 pstmt . s e t S t r i n g ( 1 , " 3 − 1 2 3 . . . " ) ; R e s u l t S e t r s = pstmt . exe cuteQuery ( ) ; DB2_Mitschrift.tex,v,1.1,November 4, 2006 at 11:37:11 CET Methode 3: 2 CREATEE PRODUCERE readbook @isbn char ( 1 3 ) AS s e l e c t author , t i t l e from Books where i s b n =@isbn ; 4 C a l l a b l e S t a t e m e n t cstmt = con . p r e p a r e C a l l ( " { c a l l readbook ( ? ) } ) ; 6 R e s u l t S e t r s = cstmt . exe cuteQuery ( ) ; WS 06/07 Seite 10 Rami Swailem FH Gießen-Friedberg DB2 Mitschrift Arten von Anweisungen a) Abfragende Anweisung – liefert ResultSet 1 " select . . . " R e s u l t S e t r s = stmt . executeQuery ( . . . ) ; b) Modifizierende Anweisung – liefert Zahl der veränderten Zeilen 1 3 " insert . . . " " update . . . " " delete . . . " i n t rows = stmtm . executeUpdate ( . . . ) ; DB2_Mitschrift.tex,v,1.1,November 4, 2006 at 11:37:11 CET c) Beliebige Anweisung – liefert ein Boolean 1 3 5 " . . . " boolean t o r f = stmt . e x e c u t e ( . . . ) ; // true or f a l s e wenn t o r f==true // Ergebnis i s t ResultSet r s . stmt . g e t R e s u l t S e t ( ) ; wenn t o r f==f a l s e // Ergebnis i s t i n t r s . getUpdateCount ( ) ; Ergebnismengen Relationales Modell: Tabellen/Relationen enthalten Zeilen von Werten. WS 06/07 Seite 11 Rami Swailem FH Gießen-Friedberg DB2 Mitschrift OO-Programmiersprachen: Variablen, Objekte mit Attributen(Variablen), Datenstrukturen,... -> Konzeptbruch / "paradigma mismatch" Programmiersprache Ein Resultset rs repräsentiert einen Cursor auf eine Zeile der Ergebnismenge (Relation) aus dem DBMS. Die Ergebnismenge muß nicht zwangsläufig bei executeQuery sofort vollständig „materialisiert“ sein, Zeilen können bei Bedarf nachgeladen werden. Metainformationen über die Ergebnismenge stehen in den SQL-Deskriptoren, beginnend bei 1 für Spalte 1. Arten von Ergebnismengen 1. Scroll-Eigenschaften • TYPE_FORWARD_ONLY (Abrufen nur vorwärts, schnell und einfach aber beschränkt) • TYPE_SCROLL_INSENSITIVE (Insensitive: Änderungen während der Verarbeitung des Results bleiben unsichtbar) • TYPE_SCROLL_SENSITIVE (Sensitive: Alle Änderungen während der Verarbeitung des Results wirken sich sofort aus) 2. Änderbarkeit • CONCUR[RENCY]_READ_ONLY (Cursor hat nur Lesezugriff) • CONCUR[RENCY]_UPDATEABLE (An der Position des Cursor können Daten verändert werden) 1+2 wird angegeben bei createStatement. 1.3 Metainformationen und adaptives Programmieren Fragestellungen: • nicht nur Nutzdaten, sondern Informationen über die Nutzdaten über das Datenbanksystem • Informationen über die Fähigkeiten eines DBMS, um diese in einer Anwendung berücksichtigen zu können DB2_Mitschrift.tex,v,1.1,November 4, 2006 at 11:37:11 CET 1. Fehler- und Statusinformationen Konzept der DB: SQL Communication Area (Datenstrukturen für Fehler- und Statusmeldungen) • standardisierte Fehlercodes (in SQL) • DBMS-spezifische Fehlermeldungen Konzept in JDBC: SQLException ex, enthält WS 06/07 Seite 12 Rami Swailem FH Gießen-Friedberg DB2 Mitschrift • Beschreibung des Fehlers: ex.getMessage(); • SQL-Status: ex.getSQLState(); • Meldung der Datenquelle: ex.getErrorCode(); • Kette der (bei der DB) anliegenden Meldungen: ex.getNextException(); Konzept in ADO.NET: DataException de, enthält • Beschreibung: de.getMessage(); • Reihe von abgeleiteten Klassen wie z.B. – DuplicateNameException – InvalidExpressionException – ··· Besonderheiten in ADO.NET: Connection erzeugt ein Event InfoMessage, korrespondierender Delegat behandelt das Event (entspricht Fehlermeldung). 2. Informationen über einzelne Werte Konzept der DB: Indikatorvariable (wird intern vom Treiber bei der Kommunikation mit dem DBMS verwendet, insb. für NULL-Werte interessant) Konzept in JDBC: ResultSet rs • rs.wasNull() ∼ = die zuletzt aus rs gelesene Info war ein NULL-Wert. Konzept in ADO.NET: DataReader rs • dr.IsDBNull(int i); // int i: Index der Spalte) 3. Aufbau einer Ergebnismenge Konzept der DB: SQLDeskriptor • SQLDeskriptor beschreibt eine Spalte einer Ergebnistabelle: Spaltenname, Datentyp, ··· • pro Spalte ein SQLDeskriptor, Zählung startet bei 1 DB2_Mitschrift.tex,v,1.1,November 4, 2006 at 11:37:11 CET Konzept in JDBC: 2 4 ResultSetMetaData rsmd ; rsmd = r s . getMetaData ( ) ; // Meta−Daten d i e s e s ResultSets i n t rsmd . getColumnCount ( ) ; // Zahl der Spalten i n t rsmd . getColumnType ( i n t i ) ; // Typ der Spalte i , beginnend bei 1 s t r i n g rsmd . getColumnName ( i n t i ) ; // Name der Spalte Konzept in ADO.NET: WS 06/07 Seite 13 Rami Swailem FH Gießen-Friedberg 1 3 DB2 Mitschrift DataReader dr ; dr . ExecuteReader ( ) ; dr . F ie l d C o u n t ; // Zahl der Spalten des Ergebnis dr . GetName ( i n t i ) ; // Name der Spalte i , beginnend bei 0 DataTable dr . GetSchemaTable ( ) ; Eine Zeile der Schema-Tabelle beschreibt eine Spalte der (Nutzdaten-)Tabelle. 4. Informationen über die Datenquelle Konzept der DB: Systemkatalog • Informationen, die die JDBS-Treiber bzw. ADO.NET DataProvider liefern Konzept in JDBC: DatabaseMetaData dbmd = con.getMetaData(); • allgemeine Informationen: getURL(), getDatabaseProductVersion(); • Eigenschaften der Datenquelle: supportsFullOuterJoin(); supportsANSI92EntryLevelSQL(); • Grenzwerte in der Datenquelle: getMaxConnections(); getMaxRowSize(); • Systemkatalog: getTables(); getPrimaryKeys(); ... Konzept in ADO-ET (2.0) DataTable dt = con.getSchema(); //DataTable enthält Infos DataTable tables = con.getSchema("TABLES"); Adaptives Programmieren Ziele: 1. Programmcode soll für verschiedene DBMS funktionieren. 2. Programmcode soll fähig sein, spezielle Eigenschaften eines DBMS auszunutzen. Lösung: Adaptives Programmieren = verwende Metainformationen über die Datenquelle um den Zugriff zu steuern. Bsp in JDBC: (Technik = adaptives Programmieren) DB2_Mitschrift.tex,v,1.1,November 4, 2006 at 11:37:11 CET 2 4 6 8 . . . DatabaseMetaData dbmd = con . getMetaData ( ) ; ... i f (dbmd . s u p p o r t s F u l l O u t e r J o i n ( ) ) { . ... // f u l l outer j o i n s } else { ... // g e s c h a c h t e l t e S e l e c t s ( oder andere " Notloesung " ) } WS 06/07 Seite 14 Rami Swailem FH Gießen-Friedberg DB2 Mitschrift 1.4 Architektur von ADO.NET 1.5 Speicherresidente Datenbankstrukturen mit ADO.NET 1.6 Objekt-Relationales Mapping am Beispiel Hibernate 2 Transaktionen und Nebenläufigkeitskontrolle 2.1 Eigenschaften und Verwendung von Transaktionen 2.2 Serialisierbarkeit und Nebenläufigkeitskontrolle 2.3 Isolationslevel in SQL-Datenbanksystemen 2.4 Strategien der Nebenläufigkeitskontrolle 3 Verteilte Datenbanken 3.1 Architektur verteilter Datenbanken 3.2 Datenspeicherung in verteilten Datenbanken 3.3 Verteilte Anfragen 3.4 Änderung verteilter Daten und Replikation 3.5 Verteilte Transaktionen 4 Datenbanksicherheit und Autorisierung x DB2_Mitschrift.tex,v,1.1,November 4, 2006 at 11:37:11 CET WS 06/07 Seite 15 Rami Swailem FH Gießen-Friedberg DB2 Mitschrift 4.1 Autorisierung und Zugriffskontrolle 4.2 Techniken zum Recovery 5 Datenanalyse zur Entscheidungsfindung 5.1 Data-Warehouses 5.2 Data-Mining 6 Neue Datenbanktechnologien 6.1 XML und Datenbanken 6.2 Temporale Datenbanken 6.3 Geografische Datenbanken 6.4 Logik-basierte Datenbanken DB2_Mitschrift.tex,v,1.1,November 4, 2006 at 11:37:11 CET WS 06/07 Seite 16