Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

© 2005, Rudolf Jansen JDBC Rudolf Jansen Freiberuflicher Entwickler und Autor DOAG - SIG Development.

Ähnliche Präsentationen


Präsentation zum Thema: "© 2005, Rudolf Jansen JDBC Rudolf Jansen Freiberuflicher Entwickler und Autor DOAG - SIG Development."—  Präsentation transkript:

1 © 2005, Rudolf Jansen JDBC Rudolf Jansen Freiberuflicher Entwickler und Autor http://www.rudolf-jansen.de info@rudolf-jansen.de DOAG - SIG Development 8.11.2005

2 © 2005, Rudolf Jansen Agenda  JDBC-Treiberauswahl  Oracle 10g-Treiber  JDBC 4.0: Ein Ausblick

3 © 2005, Rudolf Jansen JDBC Java DataBase Connectivity Zugriff auf DB über Java-API-Funktionen Abbildung auf konkrete Datenbank durch JDBC-Treiber  Portabilität (theoretisch) PreparedStatement pStmt = conn.prepareStatement( "select prs_nr, prs_vorname, prs_nachname from person where prs_nr = ?"); for( int i = 1; i<=3; i++ ){ // Parameter setzen pStmt.setInt(1, i); // Statement ausfuehren resSet = pStmt.executeQuery(); // Ergebnis ausgeben.... }

4 © 2005, Rudolf Jansen JDBC-Treibertypen  Typ 1 (JDBC-ODBC-Brücke)  Zugriff über ODBC (OpenDataBaseConnectivity)-Treiber.  Voraussetzung: Existenz eines ODBC-Treiber auf dem Clientrechner.  Typ 2 (Native Treiber)  Umwandlung in herstellerspezifische Anfragen (bei Oracle OCI)  Voraussetzung: Existenz nativer Bibliotheken auf dem Clientrechner.

5 © 2005, Rudolf Jansen JDBC-Treibertypen  Typ 3  Umwandlung in herstellerunabhängiges Netzprotokoll.  Voraussetzung: Datenbankhersteller unterstützt dieses Protokoll.  Typ 4 (Thin-Treiber)  Umwandlung in herstellerspezifisches Netzprotokoll auf Basis von Java Sockets.  basieren vollständig auf Java  Vorteil: keine spezielle Software auf Clientseite nötig è Einsatz bei Applets

6 © 2005, Rudolf Jansen Oracle-JDBC-Treiber  OCI-Treiber (clientseitig)  Zugriff über OCI-Bibliotheken (C-Routinen)  Thin-Driver (clientseitig)  100 % Java  Zugriff über SQL*Net-Protokoll (Basis TCP/IP)  Thin-Driver (serverseitig)  Zugriff aus in der Datenbank laufenden Anwendungen auf andere Datenbanken  KPRB Treiber (serverseitig)  Zugriff aus in der Datenbank laufenden Anwendungen  Zugriff aus C-Routinen im selben Adressraum wie die SQL-Engine (Performancevorteile)

7 © 2005, Rudolf Jansen Oracle-JDBC-Treiber

8 © 2005, Rudolf Jansen Oracle-JDBC-Treiber Thin versus OCI Vorteile OCI – höherer Funktionsumfang (insbesondere bei Einsatz spezieller Oracle-Features) – schneller (?) Nachteil OCI: – erfordert bis einschl. 9i Oracle-Client-Installation auf jedem Client-Rechner Oracle 10g: – „Instant Client“-Paket – otn.oracle.com/tech/oci/instantclient/instantclient.html – Aufnahme der Dateien in den CLASSPATH genügt – keine Client-Installation mehr nötig

9 © 2005, Rudolf Jansen JDBC-Treiber nicht jeder JDBC-Treiber unterstützt alle JDBC-Features JDBC-Klasse DatabaseMetaData zur Abfrage der unterstützten Funktionen, z.B. - supportsSavepoints - supportsStatementPooling - supportsGetGeneratedKeys JDBC-Treiber-Auswahl: http://industry.java.sun.com/products/jdbc/drivers

10 © 2005, Rudolf Jansen JDBC-Treiber-Auswahl

11 © 2005, Rudolf Jansen JDBC-Treiber Zu beachten: Nicht jeder Datenbankserver unterstützt alle JDBC-Features Beispiel: Result Sets Ab JDBC 2.0: Scrollable ResultSets – Auch Rückwärts-Sprünge, absolute und relative Sprünge Connection.createStatement (int resultSetType, int resultSetConcurrency) – ResultSet – Typen: TYPE_FORWARD_ONLY TYPE_SCROLL_INSENSITIVE TYPE_SCROLL_SENSITIVE – Oracle: Clientseitiger Cache (Ressourcen-aufwendig)

12 © 2005, Rudolf Jansen Oracle 10g-JDBC-Treiber Neue Features : Connection Caching - Implicit Connection Cache - Fast Connection Failover JDBC 3.0-Support mit Ausnahme von - Verarbeitung automatisch erzeugter Schlüssel - Result-Set Holdability - Rückgabe mehrerer Result-Sets eines JDBC-Statements Verbesserung beim Einsatz des OCI-Treibers: - „Instant Client“-Paket - otn.oracle.com/tech/oci/instantclient/instantclient.html - Aufnahme der Dateien in den CLASSPATH genügt - keine Client-Installation mehr nötig

13 © 2005, Rudolf Jansen JDBC-Connection-Cache J2EE-Anwendungen – Connections werden nur kurz benötigt – kein Schließen der Verbindung – stattdessen Rückgabe in den Connection-Cache – bisher: alle Connections im Cache mit der gleichen Datenbank und dem gleichen DB-User Oracle 10g: – Anforderung aus RAC-Architektur: Fast Connection Failover

14 © 2005, Rudolf Jansen Fast Connection Failover Ausfall eines Knotens - Nachricht an den Connection-Pool - Umkonfiguration aller im Pool befindlichen Connections zu diesem Knoten Wiederanlauf eines Knotens - Umkonfiguration zwecks Lastverteilung OracleDataSource ds = new OracleDataSource(); ds.setUser(...);... ds.setConnectionCachingEnabled(true); ds.setFastConnectionFailoverEnabled(true);

15 © 2005, Rudolf Jansen Oracle JDBC-Erweiterungen zusätzliche Möglichkeiten – Umgang mit Oracle-eigenen Datentypen – Performancesteigerungen ABER: Portabilitätsverlust Package oracle.jdbc – ersetzt ab Oracle 9i das bisherige Package oracle.jdbc.driver – enthält u.a. folgende Klassen: OracleCallableStatement OracleConnection OracleResultSet OracleStatement OracleTypes

16 © 2005, Rudolf Jansen JDBC 4.0 – Ziele  Anpassung an aktuellen SQL-Standard SQL 2003 (insbesondere XML-Anbindung)  Integration aktueller JSRs (RowSets)  „Ease-Of-Development“  „Enterprise Needs“  Java 1.5 – Features (Annotations, Generics)

17 © 2005, Rudolf Jansen JDBC 4.0 – J2SE 5 Features Annotations:  Codierung über Metadaten  Toolgestützte Auswertung  API-Zugriff  Anwendungsgebiete: - Codegenerierung (z.B. EJB, RMI) - Informationen für andere Anwendungen (z.B. Projektverwaltung)  Beispiel: deprecated class Test { @Deprecated public void eineAlteMethode(){ … }; public void dieNeueMethode(){…}; }

18 © 2005, Rudolf Jansen Datenbankzugriffe mit JDBC 4.0  Kein „DriverManager“ mehr im Sourcecode  Java kümmert sich selber um JDBC-Treiber-Management  Verbindungsaufbau über @Database-Annotation: @Database(type=”Oracle”, host=”localhost”,port=”4711”, user=”scott”, password=”tiger”); Benutzerdefinierte Klasse für selektierte Daten class EmployeeResults { public String name; public String dept; public Integer salary; }

19 © 2005, Rudolf Jansen Datenbankzugriffe mit JDBC 4.0 Interface-Definition für Abfragen und DML interface EmployeeQueries { @Query(SQL="SELECT * FROM EMPLOYEE") EmployeeResults getAllEmployees(); @Query(SQL="SELECT * FROM EMPLOYEE WHERE salary > { sal } ") EmployeeResults getManagers(int sal); @Update(SQL="UPDATE EMPLOYEE SET salary = { sal } WHERE name = { name } ”) int changeSalary(int sal, String name);

20 © 2005, Rudolf Jansen Datenbankzugriffe mit JDBC 4.0  Einsatz der QueryFactory AllQueries aq = QueryFactory.create (AllQueries.class);  QueryFactory „verarbeitet“ @Query- und @Update- Annotations, d.h. „generiert“ die Datenbankzugriffe

21 © 2005, Rudolf Jansen Datenbankzugriffe mit JDBC 4.0  Datenbankzugriff über benutzerdefinierte Klasse EmployeeResults (und Generics-Erweiterung aus J2SE 5) DataSet rows = aq.getAllEmployees(); for (EmployeeResults elem: rows) { System.out.println(elem.name); System.out.println(elem.dept); System.out.println(elem.salary); } EmployeeResults newEmp = new EmployeeResults(); newEmp.name = “Bill Gates”; newEmp.dept = “Consulting”; newEmp.salary = new Integer(10000); rows.insert(newEmp);

22 © 2005, Rudolf Jansen JDBC 4.0 – XML-Erweiterungen Neue XML-Features in SQL:2003  Nativer XML-Datentyp Beispiel (Oracle): create table person ( prs_nr number, prs_data XMLTYPE );  SQL/XML-Funktionen

23 © 2005, Rudolf Jansen JDBC 4.0 – XML-Datentyp Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery( „select from tabelle …“); while(rs.next()) { XMLType xmlSpalte = (XMLType) rs.getObject(1); org.w3c.dom.Document doc=xmlSpalte.getDOM(); … }

24 © 2005, Rudolf Jansen JDBC 4.0 – SQL/XML-Funktionen Aus SQLX-Standard  xmlagg()  xmlattributes()  xmlconcat()  xmlelement()  xmlforest() Ziel: Generierung einer XML-Darstellung aus relational gespeicherten Daten

25 © 2005, Rudolf Jansen JDBC 4.0 – SQL/XML-Funktionen Beispiel: Relationale Tabelle person_rel create table person_rel ( prs_id NUMBER; prs_vorname VARCHAR2(100); prs_nachname VARCHAR2(100); );

26 © 2005, Rudolf Jansen JDBC 4.0 – SQL/XML-Funktionen Select XMLELEMENT( „Person“, XMLATTRIBUTES( prs_id AS „ID“), XMLFOREST( prs_vorname, prs_nachname ) ) from person_rel; Willi Schmitz Peter Meier 2 Zeilen ausgewählt

27 © 2005, Rudolf Jansen JDBC 4.0 – SQL/XML-Funktionen Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery( „Select XMLELEMENT( „Person“, XMLATTRIBUTES( prs_id AS „ID“), XMLFOREST( prs_vorname, prs_nachname ) ) from person_rel“); while(rs.next()) { XMLType xmlSpalte = (XMLType) rs.getObject(1); org.w3c.dom.Document doc=xmlSpalte.getDOM(); … }

28 © 2005, Rudolf Jansen JDBC 4.0 – Weitere Features Zusatzfunktionen für Connections: - „Connection.isValid()“ - „Connection.setClientInfo()“ für Systemmonitoring (wer benutzt welche Ressourcen) -„Connection.setName()“ für exakteren Zugriff aus ConnectionPool auf eine bestimmte Connection

29 © 2005, Rudolf Jansen Literatur JDBC 3.0-Spezifikation: http://java.sun.com/products/jdbc/download.html#corespec30 JDBC 4.0 Early Draft (JSR 221): http://jcp.org/en/jsr/detail?id=221 „Java Persistenz-Strategien: Datenzugriff in Enterprise-Anwendungen: JDO, JCA, EJB, JDBC, XML“ Andreas Holubek, Rudolf Jansen, Robert Munsky, Eberhard Wolff Software&Support Verlag 400 Seiten


Herunterladen ppt "© 2005, Rudolf Jansen JDBC Rudolf Jansen Freiberuflicher Entwickler und Autor DOAG - SIG Development."

Ähnliche Präsentationen


Google-Anzeigen