Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

JDBC – Datenzugriff aus Java

Ähnliche Präsentationen


Präsentation zum Thema: "JDBC – Datenzugriff aus Java"—  Präsentation transkript:

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


Herunterladen ppt "JDBC – Datenzugriff aus Java"

Ähnliche Präsentationen


Google-Anzeigen