Schnittstellen zur Anbindung an Datenbanksysteme



Ähnliche Dokumente
2. Datenbank-Programmierung

seit Java 1.1 Bestandteil der API: packages java.sql, javax.sql

Datenbank und Informationssysteme

Kapitel 10. JDBC und SQLJ. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken 1

Wie kommen die Befehle zum DBMS

Datenbanksysteme I Datenbankprogrammierung Felix Naumann

vs. Fehler zur Übersetzungszeit

Oracle: Abstrakte Datentypen:

Grundlagen von Python

JDBC. Es kann z.b. eine ODBC-Treiberverbindung eingerichtet werden, damit das JAVA-Programm auf eine ACCESS-DB zugreifen kann.

SQLJ. Standardisierte Java-DB. DB-Schnittstelle. Spezifikationen. Oracle, IBM, Informix, Sybase,, Tandem, Sun, Microsoft stehen dahinter

Gesicherte Prozeduren

Java Database Connectivity (JDBC) Walther Rathenau Gewerbeschule 1

Universität Stuttgart Abteilung Anwendersoftware Steht für Embedded SQL in Java. - Java-Methoden als SQL Stored-Procedures

11 Anwendungsprogrammierung

Dynamisches SQL. Folien zum Datenbankpraktikum Wintersemester 2009/10 LMU München

Kapitel 10: Datenbankzugriff & Pufferung 2

LINQ to SQL. Proseminar Objektorientiertes Programmieren mit.net und C# Christoph Knüttel. Institut für Informatik Software & Systems Engineering

Architekturen. Von der DB basierten zur Multi-Tier Anwendung. DB/CRM (C) J.M.Joller

Grundlagen von Datenbanken SS 2010 Kapitel 8: Datenbank-Einbettung in Programmiersprachen Prof. Dr. Stefan Böttcher Universität Paderborn

Prozedurale Datenbank- Anwendungsprogrammierung

Kapitel 9. Embedded SQL. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken 1

3. Stored Procedures und PL/SQL

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Wie kommen die Befehle zum DBMS

Datenbanksysteme I Übung: JDBC. Jana Bauckmann

SQL für Trolle. mag.e. Dienstag, Qt-Seminar

O/R Mapper. O/R Mapper anhand von NHibernate & Entity Framework Thomas Mentzel März 2010

Folgendes PL/SQL Codefragment zeigt das grundlegende Statement für diesen Test: Java.

Datenbankentwurf & Datenbankzugriff mit JDBC. Georg Köster Sven Wagner-Boysen

Datenmanagement in Android-Apps. 16. Mai 2013

Von ODBC zu OLE DB. Neue Möglichkeiten der Datenintegration. Harald Gladytz, Team Vertrieb ESRI Niederlassung Leipzig

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

ORM & OLAP. Object-oriented Enterprise Application Programming Model for In-Memory Databases. Sebastian Oergel

Praktikum Datenbanksysteme

Anleitung zur Einrichtung einer ODBC Verbindung zu den Übungsdatenbanken

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER

Webbasierte Informationssysteme

Verteidigung gegen SQL Injection Attacks

Objektrelationale Datenbanken

Nachtrag: Farben. Farbblindheit. (Light und Bartlein 2004)

Datenbanken & Informationssysteme Übungen Teil 1

Verbinden von IBM Informix mit Openoffice mittels JDBC

SQL (Structured Query Language) Schemata Datentypen

Update und Konfiguraton mit dem ANTLOG Konfigurations-Assistenten

JDBC. Allgemeines ODBC. java.sql. Beispiele

WS 2010/11 Datenbanksysteme Fr 15:15 16:45 R Vorlesung #6. SQL (Teil 4)

Softwareentwicklung mit JAVA EE

Database Exchange Manager. Infinqa IT Solutions GmbH, Berlin Stralauer Allee Berlin Tel.:+49(0) Fax.:+49(0)

White Paper. Konfiguration und Verwendung des Auditlogs Winter Release

C# - Einführung in die Programmiersprache Arbeiten mit ADO.NET. Leibniz Universität IT Services Anja Aue

6.9 Java Server Pages

Java Einführung Packages

How-to: Webserver NAT. Securepoint Security System Version 2007nx

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

VBA-Programmierung: Zusammenfassung

SQL SQL. SQL = Structured Query Language (SEQUEL) IBM San Jose Research Laboratory SYSTEM R. Grundlagen der Datenbanksysteme I

Dipl. Inf. Dipl. Math. Y. Orkunoglu Datum:

Kapitel DB:VI (Fortsetzung)

Schlüssel bei temporalen Daten im relationalen Modell

Datenbankprogrammierung 1

Objektorientierte Programmierung

UNIVERSITÄT ULM Fakultät für Ingenieurswissenschaften und Informatik Institut für Datenbanken und Informationssysteme

8a. Exkurs.NET. 8a.1.NET Architektur

Was ist PDF? Portable Document Format, von Adobe Systems entwickelt Multiplattformfähigkeit,

3. Das Relationale Datenmodell

Datenbanksysteme. Programmieren von Datenbankzugriffen mit JDBC. Burkhardt Renz. Fachbereich MNI Technische Hochschule Mittelhessen

Klausur Datenbanken II

Prinzipien Objektorientierter Programmierung

Datenbankanwendungen (JDBC)

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Grundzüge und Vorteile von XML-Datenbanken am Beispiel der Oracle XML DB

Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen. Alexander Schunk Marcel Teuber Henry Trobisch

Integration, Migration und Evolution

Arbeiten mit einem lokalen PostgreSQL-Server

Eigenen WSUS Server mit dem UNI WSUS Server Synchronisieren

OP-LOG

Client-Server-Beziehungen

Whitepaper. Produkt: combit Relationship Manager. Einbindung externer FiBu-/Warenwirtschaftsdaten. combit GmbH Untere Laube Konstanz

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

SAP NetWeaver Gateway. 2013

5. Programmierschnittstellen für XML

Java und Datenbanksysteme Datenbankanbindung mit JDBC

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Arbeitsgruppe Multimedia DLmeta in echten Anwendungen

Betriebshandbuch. MyInTouch Import Tool

Architektur des agimatec-validation Frameworks

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

ObjectBridge Java Edition

Übungsblatt 8- Lösungsvorschlag

Objektbasierte Entwicklung

Übung Datenbanksysteme I JDBC. Thorsten Papenbrock

Whitepaper. Produkt: combit Relationship Manager. Einbindung externer FiBu-/Warenwirtschaftsdaten. combit GmbH Untere Laube Konstanz

Proseminar Datenbanken

Interaktive Webseiten mit PHP und MySQL

Übung Datenbanksysteme I JDBC. Thorsten Papenbrock

2. Einrichtung der ODBC-Schnittstelle aus orgamax (für 32-bit-Anwendungen)

IV. Datenbankmanagement

Transkript:

Schnittstellen zur Anbindung an Datenbanksysteme Schnittstellen zur Anbindung an Datenbanksysteme Low-Level-Schnittstellen: Embedded SQL SQL-CLI ODBC JDBC/SQLJ High-Level-Schnittstellen: Object Mappers LinQ 1 1

Allgemeine Problemstellung SQL ist eine deklarative Anfragesprache für relationale Datenbanken Gängige Programmiersprachen sind zumeist imperativ Einbindung von SQL in eine Wirtssprache daher notwendig Impedance Missmatch: Unterschiedliche Typsysteme Mengen Orientiert vs. Record at a Time imperativ vs. deklarativ 2 Cursor Konzept Ermöglicht den Zugriff auf Ergebnismengen von imperativen Sprachen Anfrage liefert einen Cursor als Repräsentation der Ergebnismenge 3 2

Embedded SQL Definiert in SQL-Standard nach ISO/IEC 9075-2 Zwei Varianten: Statisch Dynamisch Datenbankspezifische Implementierungen Sourcecodekompatibel Nicht Binärkompatibel: DBMS Wechsel -> Neuübersetzung Ermöglicht Einbindung in folgende Wirtssprachen (lt. Standard): Ada, C, COBOL, Fortran, MUMPS, Pascal, PL/I 4 Embedded SQL Kommunikation zwischen Wirtssprache und ESQL erfolgt über Host Variablen. Sind sowohl innerhalb von ESQL als auch der Wirtssprache gültig Innerhalb von SQL-Statements mit Doppelpunkt als Präfix Direkte Integration der Fehlerbehandlung in die Wirtssprache Vorübersetzung von SQL: Optimierung der Statements Schemaüberprüfung Typüberprüfung 5 3

ESQL-Beispiel Deklaration der Hostvariablen: EXEC SQL BEGIN DECLARE SECTION;! int angebotsnummer;! char kursnummer[3];! char datum[8]; /* Impedance Missmatch! Datum wird zu Zeichenkette */! char ortsname[20];! EXEC SQL END DECLARE SECTION;! Ausführen der Abfrage: EXEC SQL SELECT Datum, Ort!!INTO :datum, :ort! FROM Angebot! WHERE AngNr = :angebotsnummer!!and KursNr = :kursnummer;! Verarbeiten der Anfrageergebnisse: printf( Angebot findet am %s in %s statt., datum, ort); 6 Dynamisches ESQL Bei statischem ESQL steht die Struktur der Abfrage zur Übersetzungszeit schon fest. Ist zur Übersetzungszeit die Anfrage noch nicht vollständig bekannt, so muss auf dynamisches SQL zurückgegriffen werden. Struktur der Antworttupel zur Übersetzungszeit ist nicht immer bekannt Typüberprüfung zu diesem Zeitpunkt nicht möglich Bei SELECT-Anfragen, die bis auf die WHERE-Bedingung bekannt sind Typüberprüfung möglich 7 4

SQL Call Level Interface (CLI) Low Level Schnittstelle zur Anbindung von Datenbanken Im SQL Standard ISO/IEC 9075-3 definiert. Definiert Strukturen und Prozeduren um SQL-Statements aus Wirtssprachen abzusetzen Prozeduren sind unabhängig von auszuführendem SQL- Statement Auf Client - Server Betrieb ausgelegt. Für folgende Sprachen definiert: - Ada - Mumps - C - Pascal - COBOL - PL/I - Fortran 8 SQL Call Level Interface (CLI) Unabhängig von Präprozessor Applikationen werden ausschließliche gegen SQL/CLI-API gelinkt Binärkompatibel Für Resourcen werden Referenzen (Handles) allokiert und können so den entsprechenden Funktionen übergeben werden Benötigt keine globalen Speicherbereiche Keine explizite Cursordeklaration nötig Metadatenschnittstelle nur in SQL/CLI der Opengroup, nicht aber im ISO-Standard 9 5

Embedded SQL vs. SQL/CLI SQL/CLI Cursor wird für auszuführende Statements implizit erstellt Statusse und Ressourcen werden jeweils lokalen Variablen zugeordnet. Statements werden dynamisch zusammengesetzt Übernimmt automatische Konversion der Datentypen Sicherheitskonzept ist rein auf Benutzerebene Embedded SQL Cursor muss explizit deklariert werden Statusse und Ressourcen werden in globale Variablen gehalten Statische Typüberprüfung bei statischen SQL-Statements möglich Datentypen müssen explizit angegeben werden Feingranulares Sicherheitskonzept Für 5 Sprachen definiert + Sprachen Unterstützung für 5 festgelegte die gegen Objektcode linken Programmiersprachen 10 Open Database Connectivity (ODBC) Prozedurale standardisierte Schnittstelle für SQL Von Microsoft auf Basis des Call Level Interfaces 1992 entwickelt Neben Windows auch diverse UNIX Implementierungen verfügbar Führt das Treibermanager/Treiberkonzept ein: Datenbankunabhängige Treiberschnittstelle Datenbankabhängige Treiberimplementierung Treibermanager als Vermittler zwischen der Applikation und dem Datenbank Treiber Ermöglicht modulare Datenbankapplikationen 11 6

ODBC Unterstützt traditionelle OLTP-Applikationen Metadatenschnittstelle Features aus SQL-1999 bzw. SQL-2003 wurden nicht mehr weiterentwickelt Hunderte von Treibern für ODBC vorhanden. Freie Varianten iodbc (Independent Open DataBase Connectivity) und UnixODBC ODBC Treiber müssen im System installiert werden. 12 Architektur - ODBC 13 7

Java Database Connectivity (JDBC) Programmierschnittstelle für Java die den Zugriff auf Datenbanken ermöglicht Teil der Java Plattform seit Version 1.1 Teil des SQL-Standards Starke Integration in die Java Programmiersprache Ähnlich dem Treiberkonzept von ODBC Unterstützt vier Arten von Treibern Neben der Ausführung von traditionellen CREATE, INSERT, UPDATE und DELETE werden auch Aufrufe von Stored Procedures unterstützt. 14 JDBC Auf der JAVA-Plattform basierend betriebsystemunabhängig. Datenbank-Cursor werden durch Ergebnisobjekte vor dem Benutzer verborgen. Fehlermeldungen werden mittels Exceptions durchgeführt. Wichtig: Die Art der geworfenen Exception wird bis Version 3.0 durch den Datenbankhersteller und nicht durch den Standard definiert. Ab Version 4.0 verschiedene Exceptions vordefiniert. 15 8

Architektur-JDBC 16 JDBC - Datenstrukturen Connection: Repräsentiert eine Datenbankverbindung Repräsentationsarten für Anfragen Statement: Einfache CREATE, UPDATE, INSERT, DELETE Anfragen Prepared Statement: Ermöglicht die Ausführung Vorübersetzter Anfragen. Verhindert SQL-Injections. Callable Statement: Ermöglicht die Ausführung von SQL- Stored Procedures ResultSet: Stellt die Ergebnismenge einer Abfrage dar. ResultSetMetaData: Beinhaltet die Metadaten, wie Spaltennamen und Datentypen einer Ergebnismenge. 17 9

JDBC-Beispiel Laden des Treibers: Class.forName( MyDriverClassName");! Erstellen der Verbindung: String url = jdbc: <subprotocol>: <subname> Connection conn = DriverManager.getConnection(url);! Alternative mittels DataSource: InitialContext ic = new InitialContext(); DataSource ds = ic.lookup(url); Connection con = ds.getconnection();! 18 JDBC-Beispiel Abfrage durchführen: String qry = SELECT Datum, Ort FROM Angebot!!+ WHERE AngNr =? AND KursNR =? ; PreparedStatement stmt = conn.preparestatement(qry); stmt.setint(1,8); stmt.setint(2,15); ResultSet rs = stmt.executequery();! Abfrageergebnis ausgeben: while(rs.next()) { String da = rs.getstring( Datum ); String pl = rs.getstring( Ort ); System.out.printf( Kurs ist am %s in %s, da, pl); }! 19 10

JDBC-Beispiel Resourcen freigeben: rs.close(); stmt.close(); conn.close();! Fehlerbehandlung in JDBC: try { // JDBC Aufruf } catch(sqlexception ex) { for(throwable thr : exception) {! System.out.println(thr.getMessage());!! } } 20 SQLJ Statisches SQL für JAVA In SQL-Standard festgelegt Von der Syntax ähnlich wie statisches ESQL Ermöglicht Typüberprüfung zur Übersetzungszeit Verwendet intern JDBC -> Binärkompatibel zwischen DBMS Optimierte Implementierungen für spezifische DBMS möglich Wird hauptsächlich zur Implementierung von Stored Procedures innerhalb von DBMS verwendet. Nachteil: Keine dynamischen Bestandteile innerhalb von Anfragen möglich. 21 11

ADO.net API-Schnittstelle, die unter der.net Umgebung für die Anbindung an Datenbanken verantwortlich ist. Ähnlich zu JDBC Unterstützt von Anfang an verbundenes und nicht verbundenes Verarbeitungsmodel. Ermöglicht innerhalb der.net Umgebung Betriebssystemunabhängigkeit. Für Abwärtskompatibilität ist Zugriff auf ODBC bzw. OLEDB Datenquellen möglich. 22 DB-Abstraktionsschicht in OO-Sprachen Fast alle OO-Sprachen besitzen Low Level DB-APIs (vgl. JDBC, ADO.NET...) Low Level APIs mit objektorientierten Mitteln gebaut (Connection, ResultSet...) Verarbeitung selbst ist prozedural, da Ergebnismenge keine Objekte repräsentieren. Anwender muss händisch zwischen Tupelmenge und Objekten konvertieren Arbeitsintensiv + Fehleranfällig Lösungsansatz: Frameworks und Bibliotheken versuchen die DB zu abstrahieren. Diese werden Objekt Relationale Mapper (ORM) genannt. 23 12

Object-relational Impedance Missmatch OO-Sprachen kapseln Informationen in Objekten. Objekte besitzen öffentliche Schnittstelle und verstecken die interne Repräsentation RDBMS kennen nur öffentliche Daten Unterschiede im Typsystem (z.b. by-value vs. by-reference) OO Sprachen verwenden navigierenden Zugriff um Assoziationen zu traversieren (verschachtelte Datenstrukturen) In RDBMs werden Assoziationen durch JOINs aufgelöst. (flache Datenstrutkturen) Deklarative vs. imperative Semantik OO-Konzepte wie Vererbung im relationalen Modell nicht vorhanden 24 Eigenschaften eines ORM Einfache Spezifikation von Abbildungen zwischen Tabellen und Objekten Navigierender Zugriff auf Objekten Objektorientierte Anfragesprachen Ergebnisse von Anfragen sind erneut Objekte 25 13

Problemstellungen bei OR-Mapping Wann werden Assoziationen geladen? z.b.: Abteilungen werden aus einer Datenbank geladen. Wann werden die dazugehörigen Mitarbeiter geladen? Wie ist der Lebenszyklus von Objekten? Wie wird die Objektidentität behandelt. Wie werden Assoziationen abgebildet. Wie werden bidirektionale Referenzen abgebildet. z.b.: Auf Objekten der Klasse Abteilung kann die Methode getmitarbeiter aufgerufen werden. Auf Objekten der Klasse Mitarbeiter kann die Methode getabteilung aufgerufen werden. Wie wird Vererbung abgebildet. 26 OR - Mapping-Strategien Einfaches Objekt (ohne Assoziationen) auf Tabelle: Jedes Tupel entspricht einem Objekt. Jede Eigenschaft eines Objektes wird auf ein Attribut eines Tupels abgebildet (soweit möglich mit jeweils gleichem Namen). Die Datentypen der Tabelle und des Objektes werden aufeinander abgestimmt. (z.b.: Timestamp Calendar) 27 14

OR Mapping-Strategien 1:N Beziehung: Im relationalen Schema werden 1:N durch Fremdschlüssel auf der N-Seite Abgebildet: Abteilung(AbteilungsId, Abteilungsname)!!!Mitarbeiter(MitarbeiterNr, AbteilungsId, Namen)! Objektorientiert wird der Sachverhalt wie folgt modelliert: 28 OR Mapping-Strategien M:N Beziehung: Im relationalen Schema werden M:N Beziehung mittels separaten Beziehungsrelationen abgebildet: Benutzer(Login, Email)!Berechtigung(Ber_Name, Beschreibung)!IstBerechtigt(Login, Ber_Name)! Objektorientiert wird dieser Sachverhalt wie folgt modelliert: 29 15

OR Mapping-Strategien Vererbung: Gegeben sei folgendes Objektmodell: 30 OR Mapping-Strategien Vererbung: Abbildung mittels Single Table Inheritance: Eine Relation enthält die Vereinigung aller Properties der gesamten Vererbungshierarchie. Zusätzlich wird eine sogenannte Diskriminatorspalte eingefügt, die den Typ das aktuelle Tupel spezifiiziert. File(DateiID, Elternpfad, Name,! Auflösung, Länge, Bitrate, DISC)! Abbildung mittels Class Table Inheritance: Sowohl Basis- als auch Subklassen in eigenen Relationen. File(DateiID, Elternpfad, Name)!Audio(DateiID, Bitrate, Länge)!Bild(DateiID, Bitrate)! 31 16

OR Mapping-Strategien Vererbung: Abbildung mittels Concrete Table Inheritance: Für jede Subklasse wird eine eigenständige Tabelle mit der Vereinigung der Attribute aus der Sub- und der Basisklasse erzeugt. Audio(DateiID, Elternpfad, Name, Bitrate, Länge)!Bild(DateiID, Elternpfad, Name, Auflösung)! 32 Möglichkeiten zur Spezifikation Mittels XML Dialekt: vgl. Hibernate, OpenJPA Source Code Annotations: vgl. JPA-Standard Im Source Code mittels Meta Programming: vgl. Ruby on Rails 33 17

ORM - Abfragesprachen Criteria APIs für dynamische Abfragen. vgl. Hibernate: z.b.: Criteria crit =!!sess.createcriteria(mitarbeiter.class); crit.createcritera( Abteilung )!!.add(restrictions.eqproeprty( name, DBIS ); List<Mitarbeiter> mas = crit.list(); Diverse Object Query Languages (ähnlich zu SQL) vgl. JPA-QL. Anfragestring wird dabei als Methodenargument übergeben. z.b.: SELECT ma FROM Mitarbeiter ma!where ma.abteilung.name = DBIS ;! 34 ORM - Abfragesprachen Natives SQL (muss den Ergebnisobjekten entsprechen) vgl. Hibernate z.b.: SELECT MitarbeiterNr, AbteilungsId, Namen FROM Mitarbeiter Ma INNER JOIN Abteilung Abt ON Abt.AbteilungsId = Ma.AbteilungsID WHERE Abt.Abteilungsname = DBIS ;! LINQ (Microsoft Language Integrated Query) Anfrage ist dabei direkt Bestandteil der Programmiersprache (nur Manipulation des Syntaxbaumes). Wird zur Übersetzungszeit in Äquivalente Lambda- Ausdrücke übersetzt. 35 18

ORM - Abfragesprachen LINQ (Microsoft Language Integrated Query) Beispiel Anfrage: var query = FROM ma IN this.mitarbeiter WHERE ma.abteilung.name = DBIS SELECT ma; foreach ( var ma in query ) {!Console.WriteLine (... + ma.name); }! Alternativ: var query = this.mitarbeiter.where(!ma => ma.abteilung.name == DBIS )! 36 19