Anbindung an Anwendungen

Slides:



Advertisements
Ähnliche Präsentationen
Programme in C++.
Advertisements

Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
1 Kapitel 9: Datenbankapplikationen. 2 Datenbankapplikationen MS Access Embedded SQL JDBC Application JDBC Applet Java Servlet Java Server Pages Cold.
1 Datenbankapplikationen 9.1MS Visio 9.2MS Access 9.3Embedded SQL 9.4JDBC 9.5Cold Fusion 9.6PHP.
Frame-Logik Eine Einführung Andreas Glausch.
Objektorientierte Datenbanken
2. DB-API: Programmierschnittstellen zu Datenbanken
Objekt – Relationales – Modell Tomasz Makowski IN
C Tutorium – Fehlerbehandlung – Knut Stolze. 2 Grundsatz Also ist auch nach jedem Funktionsaufruf auf Fehler zu prüfen!! Jeder(!) Funktionsaufruf kann.
Internet-Datenbanken
JDBC & ODMG Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding.
Objektorientierter Entwurf (OOD) Übersicht
Dr. Brigitte Mathiak WeST – Web Science & Technologies Kapitel 6 Anbindung an Anwendungen.
Ausnahmen HS Merseburg (FH) WS 06/07.
Java News & Music Der Chat
Internet-Datenbanken Grundlagen des WWW HTML HTTP Web-Anbindung von Datenbanken Servlets JSP JDBC XML Datenmodell Schemabeschreibungssprachen Anfragesprachen.
FH-Hof SQLJ Richard Göbel. FH-Hof SQLJ - Idee Erweiterung von Java um SQL Die Verwendung von SQL-Anweisungen innerhalb einer Programmiersprache wird vereinfacht.
Seminar zum pi-Kalkül betreut von Andreas Rossberg
Anfragesprachen – Dipl. Ing. Ulrich Borchert / FH Merseburg1/7 Datenbanken werden als Anhäufung von Werten eines Wertebereiches aufgefasst und Datenbankabfragen.
IS: Datenbanken, © Till Hänisch 2000 CREATE TABLE Syntax: CREATE TABLE name ( coldef [, coldef] [, tableconstraints] ) coldef := name type [länge], [[NOT]NULL],
Open Database Connectivity (ODBC). © Prof. T. Kudraß, HTWK Leipzig Open Database Connectivity (ODBC) Idee: – API für eine DBMS, das ein Call-Level-Interface.
Oracle WebServer - Einführung. © Prof. T. Kudraß, HTWK Leipzig Oracle Web Application Server HTML WebServer ® File system Static HTML PL/SQL Packages.
JDBC Konzepte Realisierung von Zugriffen
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Normalformen Normalisieren Schlüssel
RDF-Schema Seminar: „Semantic Web“ André Rosin,
JDBC -Java Database Connectivity-. 15./22. April 2004JDBC2 JDBC.... verbindet Java-Programme mit SQL-basierten Datenbanken.. liefert eine generische SQL-API.
JDBC EDV JDBC.
Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Cursor-Konzept u Zugriff auf Mengen von Ergebnistupeln u In SQLJ Iteratoren u Vergleichbar.
Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Aufbau einer Verbindung zur Datenbank import java.net.URL; import java.sql.*; class JDBCExample.
UML Begleitdokumentation des Projekts
JDBC: JAVA Database Connectivity
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Datenmodelle, Datenbanksprachen und Datenbankmanagementsysteme
Visualisierung objektrelationaler Datenbanken
Seminar Softwaretechnik Dipl.-Inform. Susanne Jucknath-John
Prof. Dr. Gerhard Schmidt pres. by H.-J. Steffens Software Engineering SS 2009Folie 1 Objektmodellierung Objekte und Klassen Ein Objekt ist ein Exemplar.
RelationentheorieObjektorientierte Datenbanken AIFB SS Die Anbindung an Programmiersprachen (1/2) Prinzip und Zielsetzung der Sprachanbindungen.
Einführung in die Programmierung
Einführung in die Programmierung
Unified Modeling Language Repetition / Einführung zu UML
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Objektorientierte Konzepte/UML Geoinformation I Vorlesung 2 WS 2000/2001.
Einführung in die Programmierung Wintersemester 2012/13 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2011/12 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 1 Folie 2 Microsoft.NET Framework: Quelle:
Entwicklung verteilter Anwendungen II, SS 13 Prof. Dr. Herrad Schmidt SS 13 Kapitel 4 Folie 2 REST Web Services (1)
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 9 Folie 2 ADO.NET (1) Klassen für Zugriffe.
Vorlesung #4 Überführung des ER-Modells in das relationale Modell
Vorlesung #4 Überführung des ER-Modells in das relationale Modell
UML UML mit SiSy® Vorgehensmodell Dokumentation HTML-Export
Vom Geschäftsprozess zum Quellcode
Relationales Datenmodell ist beherrschend: –Riesige Datenbestände und damit hohe Investitionen. –Die große Mehrzahl der Anwendungen arbeitet mit weitgehend.
Datenbankanbindung mit
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003.
Unified Modeling Language UML
OQL-Anbindung an Java (1) Java als Beispiel für die Einbettung von OQL in eine Programmiersprache Die OQL-Einbettung in Java ist teilweise mit dynamischem.
Motivation Motivation für objektorientierte DBMS (ODBMS): –„Impedance Mismatch“ zwischen relationalem Datenmodell und Programmiersprachen-Datenmodell erfordert.
Quelle: xkcd.com SQL Injections.
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #8 SQL (Teil 5)
SS 2014 – IBB4C Datenmanagement Do 17:00 – 18:30 R Vorlesung #3 ER Modellierung.
JDBC1 Motivation(I) JDBC keine Abkürzung, sondern geschützter Name (inoffiziell: für Java Database Connectivity) unterschiedliche DBS haben unterschiedliche.
O/R - Mapper Hibernate ETIS SS04. Hibernate 2 Gliederung Motivation Architektur Persistente Klassen Mapping-Files Konfiguration und Datenbanken Ablauf.
Sichtbarkeit einschränken
Objektorientierte Datenbanken
 Präsentation transkript:

Anbindung an Anwendungen Kapitel 6 Anbindung an Anwendungen

Lernziele  Das grundsätzlichen Problem bei der Kopplung von objektorientierten Programmiersprachen mit relationalen Datenbanken kennenzulernen Konzepte zur Anbindung von Datenbanken an Applikationen Selbst einfache Datenbankanbindungen programmieren zu können Die grundlegende Funktionsweise von Persistenz Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen

Impedance Mismatch zwischen OO und RM Ein Objekt wird definiert durch: Identität Zustand Verhalten Kapselung Eine Relation enthält Aussagen mit dem Wahrheitswert TRUE. Beispielsweise: Es gibt einen PROFESSOR namens Sokrates, dieser hat den RANG C4 und arbeitet im RAUM 226. Beides ist nicht trivial kompatibel. Warum? Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen

Impedance Mismatch zwischen OO und RM (2)  Struktur: Dieses Problem haben wir bereits in Kapitel 3 kennengelernt, um von UML ins Relationenmodell zu kommen RM hat keine Vererbung, kein Verhalten, keine 1-zu-n oder gar n-zu-n Beziehungen Identität: Tupel haben von sich aus keine eindeutige Identität. Datenkapselung: Objekte können selbst bestimmen wie sie verändert werden Arbeitsweise: Relationen arbeiten global transaktionsbasiert Objekte sind untereinander vernetzt Ergebnismenge: SQL-Anfragen liefern (Multi-)Mengen, keine Objekte Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen

 Die gute Nachricht Alle diese Probleme sind im Einzelfall lösbar. Die schlechte Nachricht Entweder man muss Einschränkungen bei den Objekten hinnehmen, die persistent sein sollen, oder es wird sehr kompliziert und/oder unperformant. (Oder man nimmt eine nicht-relationale Datenbank.) Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen

Struktur einer OCCI Anwendung Quellcode (benutzt OCCI API und Klassen) OCCI API header Von OTT generierte C++ Header C++ Compiler Von OTT generierte C++ Implementierungen OCCI Header occi.h occiCommon.h occiControl.h occiData.h occiObjects.h OCCI Bibliothek libocci.so/libocci.a/oraocci9.dll Linker OCCI Bibliothek (statisch .lib oder dynamisch .dll) Anwendung Oracle C++ Call Interface(OCCI)

OCCI – Klassenstruktur Environment Create Create Create ConnectionPool Get Connection Get StatelessConnectionPool Get Create MetaData Statement Get Execute ResultSet Oracle C++ Call Interface(OCCI)

Schritt 1 – Eine Verbindung aufbauen  #include "DatabaseConnection.h"; … try { Environment* env = Environment::createEnvironment(); Connection* con = env->createConnection(user, password, connectionString); cout << "Connection success!" << endl;; } catch(SQLException &e) { cout << "Connection failed!" << endl; cout << e.what(); Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen

Schritt 2 – Etwas ausführen  try { Statement *stmt = con->createStatement("INSERT INTO hören VALUES (:1, :2)"); stmt->setInt(1, 26120); stmt->setInt(2, 5001); stmt->executeUpdate(); con->terminateStatement(stmt); } catch(SQLException &e) { cout << "Exception thrown for INSERT" << endl; cout << e.what() << endl; Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen

Schritt 3 – Etwas auslesen  Statement stmt = con->createStatement("SELECT PersNr, Boss FROM Assistenten"); stmt->executeQuery(); ResultSet rset = stmt->getResultSet(); while (rset->next()) { cout << " PersNr: " << rset->getInt(1) << " " << " Boss: " << rset->getInt(2) << endl; count++; } stmt->closeResultSet(rset); con->terminateStatement(stmt); Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen

Schritt 4 – Verbindung kappen  env->terminateConnection(con); Environment::terminateEnvironment(env); Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen

Schritt 5 - Errorhandling  try {…} catch(SQLException &e) { int errno = oraex->getErrorCode(); // die ORA nummer, http://www.ora-error.com/ string errmsg = oraex->getMessage(); //Die Nachricht zum Fehler cout << ex.what() << endl; // // echte Fehlerbehandlung nicht vergessen … } Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen

Nachteile von Treibern Kein Syntax-Check des SQL-Statements Es kann nicht über Statement-Grenzen hinweg optimiert werden. Es werden keine Objekte abgespeichert, sondern nur simple Types (kann mit OTT umgangen werden) Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen

Spracheinbettung (z.B. SQLJ) sqlstm.stmt = “DELETE FROM EMP WHERE ROWID=:b1”; sqlstm.iters = (unsigned long)1; sqlstm.offset = (unsigned short)193; sqlstm.cud = sqlcud0; sqlstm.sqlest = (unsigned char *)&sqlca; sqlstm.sqlety = (unsigned short)0; sqlcex(&sqlctx, &sqlstm, &sqlfpn); Beispiel: /* EXEC SQL DELETE FROM emp WHERE CURRENT OF emp_cursor; */ Spracheinbettungen und 4GL-Sprachen bieten eine bessere Integration, weil das SQL direkt im Quellcode steht Ein Präprozessor übersetzt die eingebettete Befehle und fängt damit auch Syntax-Fehler ab Weiterer Vorteil: Variablen können besser eingesetzt werden Hauptnachteil: Geringe Unterstützung von anderen Produkten, da Spracheinbettungen als altmodisch gelten Die Sprache selbst wird verändert, dies kann zu Inkompatibilitäten mit anderen Präprozessoren führen Debugging deutlich schwieriger machen Fazit: Nicht mehr state-of-the-art Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen

Persistenzframeworks – Object Relational Mapper (ORM) Grundidee: Transparente Persistenz von Objekten durch Mapping zwischen Objekten und Relationen Vorgehen: Der Zustand bestimmte Objekte wird vom Framework in der Datenbank festgehalten Vorteil: Der Programmierer kann mit den Objekten normal arbeiten Weiterer Vorteil: Das Mapping ist nicht mehr implizit in der Geschäftslogik „versteckt“, sondern wird explizit angegeben Netter Nebeneffekt: Die Aufteilung in Domänenklassen, die persistiert werden, und in andere Klassen entspricht dem MVC- Programmierparadigma Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen

ORM (Beispiel Hibernate)  Das Modell wird in Domänenklassen festgehalten (EJBs) Der Zugriff auf die EJBs erfolgt von Applikationsseite aus über DAOs (Data Access Objects) zur Entkopplung Hibernate selbst greift auf die Domänenklassen per Reflection zu Das Mapping zwischen Objekten und Datenbank wird durch XML-Dateien festgelegt (oder Annotations) Der Zugriff auf die Datenbank geschieht per JDBC Die Konfiguration sowohl des Datenbankzugriffs als auch des Verhaltens von Hibernate wird zentral verwaltet http://www.hibernate.org/hib_docs/v3/reference/en/html/architecture.html Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen

ORM (Beispiel Hibernate; Domänenklasse)  Professoren PersNr Name Rang Raum 2125 Sokrates C4 226 2126 Russel 232 Beispiel einer Domänenklasse: // Markiert die Klasse als persistierbar @Entity // Der Default Tabellenname wäre PROFESSOR @Table ( name = “Professoren“) public class Professor { @Id @GeneratedValue Long PersNr; // Jede Klasse sollte eine ID haben String Name; String Rang; Long Raum; // leerer public Konstruktur ist notwendig für Entities public Professoren(){}; /* getter und setter … */ } Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen

ORM (Beispiel Hibernate; DAO)  Professoren PersNr Name Rang Raum 2125 Sokrates C4 226 2126 Russel 232 Beispiel eines DAOs: Hinweis: getHibernateTemplate() kommt aus DAO public class ProfessorDAOHibernate extends DAO implements ProfessorDAO{ public void saveProfessor(Professor toSave){ getHibernateTemplate().saveOrUpdate(toSave); } public Professor getProfessorByPersNr(int PersNr){ return (Professor) getHibernateTemplate(). get(Professor.class, PersNr); public void deleteProfessor(Professor toDelete){ getHibernateTemplate().delete(toDelete); Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen

ORM (Beispiel Hibernate; weiterführend)  Komplexe Anfragen können sowohl über die Hibernate eigene Anfragesprache HQL als auch SQL gemacht werden Es werden mehrere Methoden angeboten 1-zu-n und n-zu-n Beziehungen in der Datenbank darzustellen Sowohl andere Objekte als auch Collections werden als Attribute akzeptiert Allerdings muss ein Mapping explizit angegeben werden Es gibt viele Tools, die den Einstieg in Hibernate erleichtern und viele der benötigten Dateien automatisch generieren Domänenklassen können aus der Datenbank erzeugt werden Standard DAOs können generiert werden Das Datenbankschema kann aus den Domänenklassen generiert werden Etc. Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen

Relativ großer Overhead für kleine Projekte Nachteile ORM Relativ großer Overhead für kleine Projekte Alles muss in Objekten gespeichert werden Gerade am Anfang ist einem nicht ganz klar, was tatsächlich passiert Benötigt Introspection, kann daher nicht für alte Programmiersprachen, wie etwa C++ umgesetzt werden Weniger Quellcode in der Persistenzschicht (-> weniger Fehler) Viele Konfigurationsoptionen um z.B. die Performanz zu optimieren Hervorragende Umsetzung von loser Kopplung zwischen den Komponenten Modell und Persistenz innerhalb eines Programms Im Moment der State-of-the-Art daher stete Weiterentwicklung und neue Features Vorteile ORM Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen

Eine etwas bessere Integration bieten Spracheinbettungen Fazit Es gibt verschiedene Möglichkeiten Anwendungen an eine relationale Datenbank anzubinden Das Hauptproblem ist dabei der Impedance Mismatch zwischen objektorientierter und relationaler Welt Der einfachste Weg ist es direkt per Treiber mit der Datenbank zu kommunizieren Eine etwas bessere Integration bieten Spracheinbettungen OR-Mapper erlauben es das Mapping zwischen den Objekten und der Datenbank festzulegen. So kann der Programmierer direkt mit den Objekten arbeiten. Datenbanken für Mathematiker, WS 11/12 Kapitel 6: Anbindung an Anwendungen