Entwicklung eines verteilten multimedia Systems mit Hilfe von Design Pattern JDBC & ODMG Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding Anwendung Vergleich AG Softwaretechnik Fachbereich 17 Mathematik/Informatik JDBC & ODMG Motivation JDBC & ODMG realisieren unterschiedliche Ansätze zum DB-Zugriff aus Java: JDBC & ODMG Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet JDBC ODMG-Standard • Paket von Klassen / Interfaces • definiert eigenes Datenmodell, Anfragesprache sowie diverse Programmiersprachenanbindungen für Objektdatenbanksysteme • Bestandteil des JDK • direkte Nutzung von SQL Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding Anwendung Vergleich AG Softwaretechnik Fachbereich 17 Mathematik/Informatik Vorname Nachname Studiengang MatrNr Philipp Mike Hoven Liebrecht Informatik Informatik 1111111 2222222 Studentenverwaltung JDBC & ODMG Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding Anwendung Vergleich AG Softwaretechnik Fachbereich 17 Mathematik/Informatik Datenbankname StudiVerwaltung Zugriffsart ODBC ODBC-Name Studiverw Server Local Vorname Attribute der Tabelle Studenten Nachname Studiengang MatrNr JDBC JDBC & ODMG Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding Anwendung Vergleich AG Softwaretechnik Fachbereich 17 Mathematik/Informatik • Standardschnittstelle zum Zugriff auf relationale Datenbanken per SQL Anweisung in Java • seit Java Version 1.1 Bestandteil der Standard-API •Package java.sql •java.sql.DriverManager •java.sql.Connection •java.sql.Statement •java.sql.ResultSet •java.sql.ResultSetMetaData • “Low-Level-API” Genereller Ablauf einer DB-Anbindung via JDBC JDBC & ODMG GetConnection() DriverManager Motivation - Beispielanwendung getConnection() Connection createStatement() JDBC - DriverManager - Connection - Statement - ResultSet Statement Statement executeQuery() Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding ResultSet MetaData ResultSet getMetaData() Anwendung Vergleich AG Softwaretechnik Fachbereich 17 Mathematik/Informatik ResultSet java.sql.DriverManager JDBC Laden des Treibers: & ODMG Class c = Class.forName („oracle.jdbc.driver.OracleDriver“); Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Verbindungsaufbau zur Datenbank: static Connection getConnection (String url) throws SQLException; static Connection getConnection (String url, String user, String pw) throws SQLException; static Connection getConnection (String url, java.util.Properties info) throws SQLException; Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding Beispiele URL: Anwendung Vergleich AG Softwaretechnik Fachbereich 17 Mathematik/Informatik „jdbc:odbc:odbc2access“ „jdbc:oracle:thin:@ipl6.upb.de:1521:mydb“ Treiber Java Applikation JDBC-API JDBC & ODMG JDBCTreibermanager Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet NativeProtokoll Treiber JDBCNetTreiber JDBCODBCBridge NativeAPITreiber DBMiddleware ODBC Client Bibliothek Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding Anwendung Vergleich AG Softwaretechnik Fachbereich 17 Mathematik/Informatik Client Bibliothek java.sql.Connection Erzeugen eines Statement-Objektes: JDBC & ODMG Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding Anwendung Vergleich AG Softwaretechnik Fachbereich 17 Mathematik/Informatik Statement createStatement() throws SQLException; Studiverwaltung: import java.sql.* ; public class DBRequest { public static void main (String [] args) { try { // Laden des Treibers Class c = Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // Aufbau der Verbindung zur DB Connection con = DriverManager.getConnection("jdbc:odbc:studiverw"); //Statement-Objekt erzeugen Statement stmt = con.createStatement(); ... Anfragen stellen, Ergebnisse behandeln... } catch (Exception e) { System.out.println( e ) ; } } } java.sql.Statement Einfache SQL-Anfrage: JDBC & ODMG ResultSet executeQuery (String sql) throws SQLException; Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung DML- oder DDL-Befehl: int executeUpdate (String sql) throws SQLException; Sequenz von SQL-Befehlen: ODMG boolean execute (String sql) throws SQLException; - Objektmodell /ODL - OQL - Java-Binding Anwendung Vergleich AG Softwaretechnik Fachbereich 17 Mathematik/Informatik java.sql.ResultSet / java.sql.ResultSetMetaData ResultSet JDBC & ODMG Motivation - Beispielanwendung Zugriff auf einzelne Tupel: boolean next(); JDBC - DriverManager - Connection - Statement - ResultSet Zugriff auf einzelne Attribute: XXX getXXX (String colName) throws SQLException; XXX getXXX (int colIndex) throws SQLException; Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding Anwendung Vergleich AG Softwaretechnik Fachbereich 17 Mathematik/Informatik ResultSetMetaData int getColumnCount() throws SQLException; String getTableName (int col) throws SQLException; int getColumnType (int col) throws SQLException; String getColumnTypeName (int col) throws SQLException; ... Anwendung import java.sql.* ; public class DBRequest { JDBC & ODMG Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung public static void main (String [] args) { try { Class c = Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con = DriverManager.getConnection("jdbc:odbc:studiverw"); makeDBRequest(con); } catch (Exception e) { System.out.println( e ); } } public static void makeDBRequest (Connection con) { try { Statement stmt = con.createStatement(); ResultSet rsStudent = stmt.executeQuery( "SELECT * FROM Studenten") ; ODMG System.out.println( “Vorname , Nachname , Matrikelnummer”); while (rsStudent.next()) { System.out.println( rsStudent.getString(Vorname)+ “,” +rsStudent.getString (Nachname) + “,” + rsStudent.getInt(MatrNr)); } } catch (Exception e) { System.out.println( e ); } rsStudent.close(); stmt.close(); - Objektmodell /ODL - OQL - Java-Binding Anwendung Vergleich } } AG Softwaretechnik Fachbereich 17 Mathematik/Informatik ODMG-Standard Definiert wichtigsten Eigenschaften eines ODBMS JDBC & ODMG Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung •Objektmodell •ODL /OIF •OQL •diverse Bindings Zusätzliche Eigenschaften ODMG - Objektmodell /ODL - OQL - Java-Binding Anwendung Vergleich AG Softwaretechnik Fachbereich 17 Mathematik/Informatik •Typkonstruktoren •Klassen, Methoden •Vererbung, Extension, •Persistenz •Objekt-Identität Objektmodell / ODL JDBC Objekttyp I Objekttyp II interface UniAngestellter { void startJob() raises (JstartException); void stopJob() raises (JstopException); void setGehalt(in long gehalt); }; class StudentHöxter (extent Student) { … } Operationen Attribute class SHK:Student { ... void setGehalt ( in long matrNr); } class Student { attribute long matrNr; attribute string vorname; ... } & ODMG Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding Anwendung Vergleich AG Softwaretechnik Fachbereich 17 Mathematik/Informatik Object Query Language JDBC & ODMG Motivation - Beispielanwendung Unterstützt folgende 3 Anfrage-Arten: Relationale Anfrage (SQL-Anfrage) SELECT b.kennzeichen FROM Auto b; JDBC - DriverManager - Connection - Statement - ResultSet Objekterhaltene Anfrage SELECT b FROM AUTO b WHERE b.farbe = „Rot“; Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding Anwendung Vergleich AG Softwaretechnik Fachbereich 17 Mathematik/Informatik Objekterzeugende Anfrage SELECT Personenkraftfahrzeuge (farbe: b.farbe, kennz: b.kennzeichen) FROM Auto b; Java-Binding Java-ODL JDBC & ODMG Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung • Objekttypen und Literale werden auf Java-Klassen und primitive Datentypen abgebildet • Attribute / Operationen sind identisch mit Attributen / Methoden der jeweiligen Klassen • Exceptions werden direkt auf den selben Mechanismus in Java übertragen • Strukturen werden anhand von Java-Klassen nachgebildet • Extensionen werden nicht unterstützt • Kollektionen werden durch SetOfObject, BagOfObject, ListOfObject ... realisiert Java-OML ODMG - Objektmodell /ODL - OQL - Java-Binding Anwendung Vergleich AG Softwaretechnik Fachbereich 17 Mathematik/Informatik • Database • Transaction Beispielanwendung für POET public class Student { Private String vorname, nachname, studiengang; Prviate int matrNr; JDBC & ODMG Motivation - Beispielanwendung JDBC public Student (String vname, String nname, String stgang, int matNr.) { vorname=vname ; nachname=nname ; studiengang=stgang ; matrNr = matNr ; } public String getNachname() { return nachname;} … } - DriverManager - Connection - Statement - ResultSet Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding Anwendung Vergleich /* * Konfigurationsdatei: * ptjavac.opt * * (impliziter) Aufruf durch den Precompiler-Aufruf: * ptjavac -xc *.java */ [schemata\my_dict1] oneFile = false [databases\my_db] oneFile = false [classes\Student] persistent = true AG Softwaretechnik Fachbereich 17 Mathematik/Informatik ; so heisst das Dictionary (=Schema) ; dieser Eintrag legt den Namen der DB fest ; Hier wird die persistenzfähige Klasse festgelegt ; diese Klasse ist persistent Beispielanwendung für POET import COM.POET.odmg.*; JDBC & ODMG public class Lookup { static void holeObjekt(Database db) throws ODMGException { Transaction txn = new Transaction(); txn.begin(); Motivation - Beispielanwendung try { Student myStudent = (Student)db.lookup("myName"); System.out.println(myStudent); } catch (Exception exc) { txn.abort(); // Sperre freigeben, weil Objekt nicht da ist throw exc; // Ausnahme an Aufrufumgebung melden } JDBC - DriverManager - Connection - Statement - ResultSet Anwendung txn.commit(); // T war o.K. ODMG } - Objektmodell /ODL - OQL - Java-Binding public static void main(String[] args) throws ODMGException { Database db = Database.open("poet://LOCAL/my_base1", Database.openReadWrite); try { holeObjekt(db); } finally { db.close(); } } Anwendung Vergleich } AG Softwaretechnik Fachbereich 17 Mathematik/Informatik import COM.POET.odmg.*; import java.util.*; public class Bind { static void binde(Database db) throws ODMGException { Transaction txn = new Transaction(); txn.begin(); try { Student myStudent = new Student("Mike","Lieb",”Inf”,32); db.bind(myStudent, "myName"); } catch (Exception exc) { txn.abort(); throw exc; } txn.commit(); // Erfolgreiche Transaktion } public static void main(String[] args) throws ODMGException { Database db = Database.open("poet://LOCAL/my_db", Database.openReadWrite); // try {binde(db);} finally { db.close(); } // DB wir geschlossen } } Vergleich JDBC + SQL ODMG - JDBC ist nur eine Schnittstelle zwischen Java und den relationalen Datenbanken - ODMG neu entwickeltes wesentlich umfangreicheres Konzept. Besteht aus objektorientierter DB (incl. Objektmodell etc.) + Schnittstellen zu mehreren Programmiersprachen, unter anderem Java - Daten werden in Tabellen gespeichert (SQL) - Daten werden als Objekte (mit ihren Eigenschaften, gekapselt als Attribute, in den Objekten) in einem / mehreren Objektbäumen gespeichert - Art der Speicherung gut geeignet um große Mengen gering strukturierter Daten zu verwalten - Durch die Kapselung der Eigenschaften in den Objekten sehr gut geeignet um komplexe, stark strukturierte Daten zu speichern - JDBC bietet lediglich eine Kapselung von SQL-Anweisungen, keine Abstraktion, Rückgriff auf SQL - Anhand des Java-Binding werden Elemente der Sprache Java direkt auf Objekte der Datenbank abgebildet - Objektmodell /ODL - OQL - Java-Binding - Impedance – Missmatch, Tabelle Objektorientierung - Kein Modellierungsbruch Anwendung - Verfahren für CASE-SYSTEME nicht geeignet, da keine Modellierung von Spezialisierung, Assoziation etc. möglich JDBC & ODMG Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung ODMG Vergleich AG Softwaretechnik Fachbereich 17 Mathematik/Informatik JDBC & ODMG Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding Anwendung Vergleich AG Softwaretechnik Fachbereich 17 Mathematik/Informatik ENDE