Kein Folientitel

Werbung
Motivation(I)
• JDBC keine Abkürzung, sondern geschützter
Name (inoffiziell: für Java Database
Connectivity)
• unterschiedliche DBS haben unterschiedliche
Programmierschnittstellen
• somit schwer, DBMS-unabhängige
Anwendungen zu entwickeln und Probleme
bei Portierung auf andere DBMS
• deshalb JDBC entwickelt
JDBC
1
Motivation (II)
• mit selben Quellcode jede beliebige DB
angesprechen (Voraussetzung Treiber und
ANSI SQL-2 Fähigkeit der DB)
• einfacher Zugriff aus Java auf bestehende
Datenbanken
• Plattform- und datenbankunabhängig
• seit JDK1.1 Bestandteil der JavaStandarddistribution
JDBC
2
Bestandteile (I)
• Klassen und Schnittstellen des package
java.sql bzw. javax.sql
• Drivermanager
– Einstiegspunkt,
– Treiber registriert,
– DB-Verbindung aufgebaut
• Connection
– repräsentiert DB-Verbindung
– eine Anwendung kann mehrere DBs öffnen
JDBC
3
Bestandteile(II)
• Statement
– ermöglicht Ausführung von SQL-Anweisungen
über gegebene Verbindung
• ResultSet
– verwaltet Ergebnisse einer Anfrage
– unterstützt Zugriff auf einzelne Spalten
JDBC
4
Treibermanager
• führt Liste mit allen geladenen Treibern
• alle Verbindungen vom Programm zur
Datenbank laufen über ihn
• Treiber aufgrund Verbindungsinformationen
gewählt
• Treiberkonzept bewirkt Flexibilität von JDBC
JDBC
5
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
6
Connection
• 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
7
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
8
Statement
• Drei Arten für Ausführung von SQL:
– Statement: einfacher SQL-Befehl
– PreparedStatement: vorkompilierter SQL-Befehl
– CallableStatement: Aufruf einer Prozedur
• Anfragen (createQuery)
• Einfüge-, Änderungs- und Löschoperationen
sowie DDL-Anweisungen (createUpdate)
– Rückgabewert kein ResultSet sondern Anzahl
betroffener Tupel oder 0 bei DDL-Befehlen
JDBC
9
PreparedStatement (I)
• Zeichenkette mit SQL-Anweisung bei
Erzeugung des Objektes zu DBMS gesendet,
dort kompiliert und zur Ausführung vorbereitet
• Laufzeitvorteile, wenn Anweisung mehrfach
mit verschiedenen Parametern ausgeführt
• für endgültige Ausführung: IN-Parameter
übergeben
JDBC
10
PreparedStatement(II)
PreparedStatement pstmt =
con.prepareStatement(“select * from table where
name=?”);
pstmt.setString(1, “test”);
ResultSet rs = rs.executeQuery();
JDBC
11
Fehlerbehandlung
• JDBC kontrolliert nicht, ob Anfrage richtig,
wenn falsch von DB Fehler erzeugt
• Fehler bei Verbindungsproblemen oder
DBMS- oder Hardwarefehler
• Fehler als Exceptions signalisiert – mit try und
catch abfangen
• Exception bedeutet nicht unbedingt, dass
Methode nicht ausgeführt  besser explizit
zurücksetzen
JDBC
12
Metadaten
• Informationen über die Datenbank
– DB-Schema, SQL-Dialekt, implementierte
Operationen
• Schnittstelle java.sql.ResultSetMetaData:
– Struktur des ResultSet
rs.getColumnCount();
• java.sql.DatabaseMetaData:
– Struktur DB oder DBMS
dmd.getURL();
JDBC
13
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
14
Neuerungen in JDBC 2.1(I)
• Scrollbare ResultSets
– rückwärts durchlaufen
– sensitiv Datenänderungen noch nach Öffnen des
ResultSets aktualisiert
• Änderbare ResultSets
– Tupel einer Ergebnismenge ändern (Änderungen
wirken sich auf Datenbank aus)
• SQL99-Datentypen
– benutzerdefinierte Typen, BLOB, ARRAY...
JDBC
15
Neuerungen in JDBC 2.1(II)
• BatchUpdates
– Ausführung mehrerer Änderungsoperationen als
Batch (Performancegewinn)
• Connection Pooling
– 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
16
Neuerungen in JDBC 2.1(III)
• Erweiterungen können Entwicklung von
Anwendungen erleichtern
• viele neue Eigenschaften optional und
müssen nicht von JDBC-Treibern unterstützt
werden
• alte Treiber weiter nutzbar (unterstützen aber
Neuerungen nicht)
JDBC
17
Quellen
• 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
JDBC
18
Herunterladen