190 likes | 344 Views
JDBC & ODMG Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding Anwendung Vergleich. JDBC & ODMG. Motivation
E N D
JDBC & ODMG Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding Anwendung Vergleich JDBC & ODMG
Motivation JDBC & ODMG realisieren unterschiedliche Ansätze zum DB-Zugriff aus Java: JDBC & ODMG Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding Anwendung Vergleich • JDBC • Paket von Klassen / Interfaces • Bestandteil des JDK • direkte Nutzung von SQL • ODMG-Standard • definiert eigenes Datenmodell, Anfragesprache sowie diverse Programmiersprachenanbindungen für Objektdatenbanksysteme
Studentenverwaltung JDBC & ODMG Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding Anwendung Vergleich
JDBC • 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” JDBC & ODMG Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding Anwendung Vergleich
Genereller Ablauf einer DB-Anbindung via JDBC JDBC & ODMG Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding Anwendung Vergleich
java.sql.DriverManager Laden des Treibers: JDBC & ODMG Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding Anwendung Vergleich Verbindungsaufbau zur Datenbank: Beispiele URL:
Treiber JDBC & ODMG Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding Anwendung Vergleich
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 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 Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding Anwendung Vergleich ResultSet executeQuery (String sql) throws SQLException; DML- oder DDL-Befehl: int executeUpdate (String sql) throws SQLException; Sequenz von SQL-Befehlen: boolean execute (String sql) throws SQLException;
java.sql.ResultSet / java.sql.ResultSetMetaData ResultSet JDBC & ODMG Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding Anwendung Vergleich Zugriff auf einzelne Tupel: Zugriff auf einzelne Attribute: ResultSetMetaData
Anwendung import java.sql.* ; public class DBRequest { 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") ; 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(); } } JDBC & ODMG Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding Anwendung Vergleich
ODMG-Standard • Definiert wichtigsten Eigenschaften eines ODBMS • Objektmodell • ODL /OIF • OQL • diverse Bindings JDBC & ODMG Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding Anwendung Vergleich • Zusätzliche Eigenschaften • Typkonstruktoren • Klassen, Methoden • Vererbung, Extension, • Persistenz • Objekt-Identität
Objektmodell / ODL Objekttyp I Objekttyp II JDBC & ODMG Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding Anwendung Vergleich 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; ... }
Object Query Language JDBC & ODMG Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding Anwendung Vergleich
Java-Binding • Java-ODL • 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 JDBC & ODMG Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding Anwendung Vergleich • Java-OML • Database • Transaction
Beispielanwendung für POET public class Student { Private String vorname, nachname, studiengang; Prviate int matrNr; public Student (String vname, String nname, String stgang, int matNr.) { vorname=vname ; nachname=nname ; studiengang=stgang ; matrNr = matNr ; } public String getNachname() { return nachname;} … } JDBC & ODMG Motivation - Beispielanwendung JDBC - 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] ; so heisst das Dictionary (=Schema) oneFile = false [databases\my_db] ; dieser Eintrag legt den Namen der DB fest oneFile = false [classes\Student] ; Hier wird die persistenzfähige Klasse festgelegt persistent = true ; diese Klasse ist persistent
Beispielanwendung für POET import COM.POET.odmg.*; public class Lookup { static void holeObjekt(Database db) throws ODMGException { Transaction txn = new Transaction(); txn.begin(); 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 } txn.commit(); // T war o.K. } public static void main(String[] args) throws ODMGException { Database db = Database.open("poet://LOCAL/my_base1", Database.openReadWrite); try { holeObjekt(db); } finally { db.close(); } } } 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 } } JDBC & ODMG Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding Anwendung Vergleich
Vergleich JDBC & ODMG Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding Anwendung Vergleich
JDBC & ODMG Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding Anwendung Vergleich E N D E