JDBC – Datenzugriff aus Java ETIS SS04. JDBC2 Gliederung Motivation Bestandteile Fehlerbehandlung...

24
JDBC – Datenzugriff aus Java ETIS SS04

Transcript of JDBC – Datenzugriff aus Java ETIS SS04. JDBC2 Gliederung Motivation Bestandteile Fehlerbehandlung...

Page 1: JDBC – Datenzugriff aus Java ETIS SS04. JDBC2 Gliederung Motivation Bestandteile Fehlerbehandlung Metadaten Zusammenfassung.

JDBC – Datenzugriff aus Java

ETIS SS04

Page 2: JDBC – Datenzugriff aus Java ETIS SS04. JDBC2 Gliederung Motivation Bestandteile Fehlerbehandlung Metadaten Zusammenfassung.

JDBC 2

Gliederung• Motivation• Bestandteile• Fehlerbehandlung• Metadaten• Zusammenfassung

Page 3: JDBC – Datenzugriff aus Java ETIS SS04. JDBC2 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“

Page 4: JDBC – Datenzugriff aus Java ETIS SS04. JDBC2 Gliederung Motivation Bestandteile Fehlerbehandlung Metadaten Zusammenfassung.

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• somit:

– selber Quellcode für Kommunikation mit beliebiger DB – (Voraussetzung: JDBC-Treiber und ANSI SQL-2

Fähigkeit der DB)

Page 5: JDBC – Datenzugriff aus Java ETIS SS04. JDBC2 Gliederung Motivation Bestandteile Fehlerbehandlung Metadaten Zusammenfassung.

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)

Page 6: JDBC – Datenzugriff aus Java ETIS SS04. JDBC2 Gliederung Motivation Bestandteile Fehlerbehandlung Metadaten Zusammenfassung.

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

Page 7: JDBC – Datenzugriff aus Java ETIS SS04. JDBC2 Gliederung Motivation Bestandteile Fehlerbehandlung Metadaten Zusammenfassung.

JDBC 7

Bestandteile(II)• Statement

– ermöglicht Ausführung von SQL-Anweisungen über gegebene Verbindung

• ResultSet– verwaltet Ergebnisse einer Anfrage– unterstützt Zugriff auf einzelne Spalten

Page 8: JDBC – Datenzugriff aus Java ETIS SS04. JDBC2 Gliederung Motivation Bestandteile Fehlerbehandlung Metadaten Zusammenfassung.

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

Page 9: JDBC – Datenzugriff aus Java ETIS SS04. JDBC2 Gliederung Motivation Bestandteile Fehlerbehandlung Metadaten Zusammenfassung.

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

Page 10: JDBC – Datenzugriff aus Java ETIS SS04. JDBC2 Gliederung Motivation Bestandteile Fehlerbehandlung Metadaten Zusammenfassung.

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

Page 11: JDBC – Datenzugriff aus Java ETIS SS04. JDBC2 Gliederung Motivation Bestandteile Fehlerbehandlung Metadaten Zusammenfassung.

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

Page 12: JDBC – Datenzugriff aus Java ETIS SS04. JDBC2 Gliederung Motivation Bestandteile Fehlerbehandlung Metadaten Zusammenfassung.

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();

Page 13: JDBC – Datenzugriff aus Java ETIS SS04. JDBC2 Gliederung Motivation Bestandteile Fehlerbehandlung Metadaten Zusammenfassung.

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)

Page 14: JDBC – Datenzugriff aus Java ETIS SS04. JDBC2 Gliederung Motivation Bestandteile Fehlerbehandlung Metadaten Zusammenfassung.

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

Page 15: JDBC – Datenzugriff aus Java ETIS SS04. JDBC2 Gliederung Motivation Bestandteile Fehlerbehandlung Metadaten Zusammenfassung.

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();

Page 16: JDBC – Datenzugriff aus Java ETIS SS04. JDBC2 Gliederung Motivation Bestandteile Fehlerbehandlung Metadaten Zusammenfassung.

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

Page 17: JDBC – Datenzugriff aus Java ETIS SS04. JDBC2 Gliederung Motivation Bestandteile Fehlerbehandlung Metadaten Zusammenfassung.

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)

Page 18: JDBC – Datenzugriff aus Java ETIS SS04. JDBC2 Gliederung Motivation Bestandteile Fehlerbehandlung Metadaten Zusammenfassung.

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...)

Page 19: JDBC – Datenzugriff aus Java ETIS SS04. JDBC2 Gliederung Motivation Bestandteile Fehlerbehandlung Metadaten Zusammenfassung.

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

Page 20: JDBC – Datenzugriff aus Java ETIS SS04. JDBC2 Gliederung Motivation Bestandteile Fehlerbehandlung Metadaten Zusammenfassung.

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();

Page 21: JDBC – Datenzugriff aus Java ETIS SS04. JDBC2 Gliederung Motivation Bestandteile Fehlerbehandlung Metadaten Zusammenfassung.

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

Page 22: JDBC – Datenzugriff aus Java ETIS SS04. JDBC2 Gliederung Motivation Bestandteile Fehlerbehandlung Metadaten Zusammenfassung.

JDBC 22

Literatur• Saake, G., Sattler, K.: Datenbanken & Java: JDBC,

SQLJ und ODMG dpunkt.verlag, Heidelberg, Mai 2000.

• http://java.sun.com/products/jdbc/• http://java.seite.net/jdbc/treiber.html• http://java.sun.com/j2se/1.4.2/docs/guide/jdbc/getstar

t/GettingStartedTOC.fm.html• Jansen, R.: Tuning-Center, Java Magazin,7/2003,

S.80: Neuerungen aus JDBC 3.0 am Beispiel der Oracle-Datenbank

Page 23: JDBC – Datenzugriff aus Java ETIS SS04. JDBC2 Gliederung Motivation Bestandteile Fehlerbehandlung Metadaten Zusammenfassung.

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())

Page 24: JDBC – Datenzugriff aus Java ETIS SS04. JDBC2 Gliederung Motivation Bestandteile Fehlerbehandlung Metadaten Zusammenfassung.

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