Präsentation herunterladen
1
JDBC – Datenzugriff aus Java
ETIS SS04
2
Gliederung Motivation Bestandteile Fehlerbehandlung Metadaten
Zusammenfassung JDBC
3
Motivation(I) Standard für Zugriff auf Datenquellen aus Java-Anwendungen RDBs, Flat Files, Spread Sheets Bestandteil Java-Standarddistribution seit JDK 1.1 aktuell: Version 3.0 JDBC keine Abkürzung inoffiziell: Java Database Connectivity einfacher Zugriff aus Java auf Datenquellen plattform- und datenbankunabhängig “write once run anywhere“ JDBC
4
Motivation (II) unterschiedliche DBS besitzen unterschiedliche Programmierschnittstellen somit: schwer, DBMS-unabhängige Anwendungen zu entwickeln Probleme bei Portierung auf andere DBMS deshalb: JDBC entwickelt selber Quellcode für Kommunikation mit beliebiger DB (Voraussetzung: JDBC-Treiber und ANSI SQL-2 Fähigkeit der DB) JDBC
5
Bestandteile (I) Klassen und Schnittstellen des package java.sql bzw. javax.sql DriverManager Einstiegspunkt, hält Liste registrierter Treiberklassen versucht Treiber zu lokalisieren + DB-Verbindung aufzubauen DataSource repräsentiert Datenquelle in Java Alternative zum DriverManager arbeitet mit JNDI (Features wie Connection Pooling, verteilte Transaktionen + Wartbarkeit verbessert) JDBC
6
Bestandteile(II) Connection repräsentiert Verbindung zu Datenquelle
beinhaltet auszuführende SQL-Statements + zurückgegebene Ergebnisse eine Anwendung kann eine oder mehrere Verbindungen zu einer oder mehreren Datenquellen haben JDBC
7
Bestandteile(II) Statement ResultSet
ermöglicht Ausführung von SQL-Anweisungen über gegebene Verbindung ResultSet verwaltet Ergebnisse einer Anfrage unterstützt Zugriff auf einzelne Spalten JDBC
8
Treibermanager führt Liste mit allen geladenen Treibern
alle Verbindungen vom Programm zur Datenbank laufen über ihn Treiber aufgrund Verbindungsinformationen gewählt registrierte Treiber entsprechend ihrer Reihenfolge getestet erster passender ausgewählt Treiberkonzept bewirkt Flexibilität von JDBC JDBC
9
Treiber Treiber Schnittstelle zwischen JDBC und DB
Austausch Treiber ermöglicht Zugriff auf andere DB mit selben Quellen d.h. jedes DBMS benötigt eigenen Treiber explizites Laden im Programm: Class.forName(„jdbc.odbc.JdbcOdbcDriver“); Java-Classloader lokalisiert Treiber und lädt und linkt ihn automatisch danach registriert sich Treiber selbständig beim Treibermanager JDBC
10
Connection (I) repräsentiert Verbindung zur Datenbank
Verbindungsaufbau: Connection con = DriverManager.getConnection( String url, String name, String passwort); Url: jdbc:<subprotocol>:<subname> Ablauf JDBC-DB-Anwendung: Verbindungsaufbau zur DB SQL-Anweisung senden Anfrageergebnisse verarbeiten JDBC
11
Connection (II) Connection Pooling (seit 2.0)
da Connectionaufbau teure Operation Reduzierung Verbindungsauf- und -abbau wenn DB-Verbindung geschlossen, nicht beendet, sondern markiert will andere Anwendung Verbindung öffnen, Prüfung, ob passende Verbindung in Pool - nur wenn nein, neue aufgebaut JDBC
12
Statement + ResultSet Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(“select...”); while(rs.next()){ System.out.println(rs.getString(“name”)); } rs.close(); stmt.close(); JDBC
13
Statement (I) Drei Arten für Ausführung von SQL (Interfaces bauen aufeinander auf): Statement: einfacher SQL-Befehl PreparedStatement: vorkompilierter SQL-Befehl CallableStatement: Aufruf einer Prozedur Methoden für Abfragen von Ergebnissen: createQuery (Anfragen) createUpdate (Einfügen, Ändern, Löschen sowie DDL-Anweisungen) seit 2.0: BatchUpdates (Ausführung mehrerer Updates als “Stapel“ - Performancegewinn) JDBC
14
Statement (II) Methoden für Ausführen von Statements:
executeQuery (Anfragen) executeUpdate (Änderungsoperation + DDL-Befehle) execute (mehr als ein ResultSet oder update count zurückgegeben) Escape Syntax ermöglicht mehr DB-Unabhängigkeit Connections, Statements, ResultSets immer explizit schliessen, um Ressourcen so früh wie möglich frei zu geben JDBC
15
PreparedStatement(I)
PreparedStatement pstmt = con.prepareStatement( “select * from person where name = ? and vorname = ?”); pstmt.setString(1, “Lustig”); pstmt.setString(2, “Peter”); ResultSet rs = rs.executeQuery(); JDBC
16
PreparedStatement (II)
Zeichenkette mit SQL-Anweisung bei Erzeugung des Objektes zu DBMS gesendet, dort kompiliert und zur Ausführung vorbereitet Parameter unbekannt, wenn Statement kreiert ? Platzhalter für Parameter für endgültige Ausführung: IN-Parameter übergeben Parameter gültig bis Aufruf clearParameter oder neu gesetzt Laufzeitvorteile, wenn Anweisung mehrfach mit verschiedenen Parametern ausgeführt JDBC
17
ResultSet (I) Java-Objekt, das Ergebnisse einer Anfrage enthält
Anfrageergebnisse haben Tabellenform (besitzen Zeilen und Spalten) Ergebnisse durch getter abfragbar ResultSet hat Cursor steht zunächst vor 1. Tupel gültig bis ResultSet oder Statement geschlossen mit next() vorwärts seit 2.0: Scrollbare ResultSets (vor-, rückwärts durchlaufen + zu bestimmter Stelle springen) JDBC
18
ResultSet (II) weitere Neuerungen 2.0
Datenänderungen noch nach Öffnen des ResultSets aktualisiert änderbare ResultSets, d.h. Tupel der Ergebnismenge in ResultSet und Datenbank änderbar SQL99-Datentypen (benutzerdefinierte Typen, BLOB, ARRAY...) JDBC
19
Fehlerbehandlung Problem: DBMS nutzen z.T. alten oder propritären SQL-Syntax Lösung: JDBC kontrolliert nicht, ob Anfrage richtig, Nutzer kann jegliche DBMS-Funktionalität nutzen wenn Anfrage falsch von DB Fehler erzeugt auch Fehler bei Verbindungsproblemen, DBMS- oder Hardwarefehlern Fehler als Exceptions signalisiert – mit try und catch abfangen Exception bedeutet nicht unbedingt, dass Methode nicht ausgeführt besser explizit zurücksetzen JDBC
20
Metadaten DBMS haben unterschiedliche Feature, Datentypen
Metadaten informieren über die Datenbank DB-Schema, SQL-Dialekt, implementierte Operationen java.sql.DatabaseMetaData: Informationen zur Struktur DB oder DBMS dmd.getURL(); Anfrage zur Laufzeit vom Nutzer eingegeben, Informationen über ResultSet nötig Schnittstelle java.sql.ResultSetMetaData: Informationen zur Struktur des ResultSet rs.getColumnCount(); JDBC
21
Zusammenfassung Standard für DB-Zugriff aus Java
plattform- und datenbankunabhängig grundlegende Feature einfach, schnell erlernbar vor 3.0 hauptsächlich grundlegende Möglichkeiten zum Zugriff von Javaprogrammen auf Datenbanken ab 3.0 DB-Zugriff aus Application Server Schicht (Connection-Pooling-Konfiguration) viele neue Eigenschaften (ab 2.0) optional und müssen nicht von JDBC-Treibern unterstützt werden alte Treiber weiter nutzbar JDBC
22
Literatur Saake, G., Sattler, K.: Datenbanken & Java: JDBC, SQLJ und ODMG dpunkt.verlag, Heidelberg, Mai 2000. Jansen, R.: Tuning-Center, Java Magazin,7/2003, S.80: Neuerungen aus JDBC 3.0 am Beispiel der Oracle-Datenbank JDBC
23
Transaktionen i.d.R. Verbindungen im autocommit-Modus gestartet (einzelnes Statement sofortige Auswirkung auf Datenbank) mehrere Operationen zusammenfassen: connection.setAutocommit(false); so: Änderungen zu beliebigen Zeitpunkt dauerhaft in DB geschrieben (commit()) oder Änderungen aktueller Transaktion rückgängig gemacht (rollback()) JDBC
24
Neuerungen in JDBC 3.0 im Vordergrund DB-Zugriff aus Application Server Schicht Connection-Pooling-Konfiguration Savepoints Wiederverwendung von Prepared Statements Zugriff auf automatisch generierte Schlüssel Zugriff auf Metainformtionen von Statement-Parametern Verbesserungen bei Result-Sets JDBC
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.