Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Willi Winkler Geändert vor über 7 Jahren
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
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.