Teil 1 herunterladen - Universität Osnabrück

Transcription

Teil 1 herunterladen - Universität Osnabrück
Datenbanksysteme SS 2007
Frank Köster
(Oliver Vornberger)
Institut für Informatik
Universität Osnabrück
Kapitel 8a:
Datenbankapplikationen
ODBC & JDBC
ODBC & JDBC
→ Was ist ODBC & JDBC?
→ ODBC = Open Database Connectivity
→ JDBC = JAVA Database Connectivity
→ Software zum Zugriff auf heterogene DBMS-Landschaft
→ ... insbesondere verschiedene Hersteller
(weiteres auf Folie 5)
→ Unterstützt Anfragen über mehrere Tabellen aus unterschiedlichen Quellen (Verknüpfung verteilter DBMS – Joins)
→ Unterstützung dynamischer Anfragen
→ Festlegung eines Sprachstandards (ODBC-SQL)
→ diverse Features (Stored Procedures, Trigger ...)
→ Festlegung von Datentypen – etwa für ...
→ numerische Werte, Strings, Datum, Zeit ...
→ Festlegung einer Programmiersprachenkopplung
(CLI = Call Level Interface – mehr auf nächster Folie)
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: [email protected]
ODBC & JDBC
ODBC & JDBC
→ Was ist CLI?
→ Funktionsbasierte Aufrufschnittstelle
→ Kommt in vielerlei Ausprägung vor ...
z.B. OCI (Oracle), ODBC (Microsoft), DB Library (Sybase),
CLI (SQL Access Group)
→ Aufgaben
→ Verbindungsmanagement
→ SQL-Anweisungen verarbeiten
→ Ergebnisse und Fehler verarbeiten
→ Beispiel JDBC
→ JDBC-Treiber transportiert nur SQL-Kommandos
→ Definiert nicht, welche Kommandos verw. werden dürfen
→ SUN verlangt aber, dass alle JDBC-Treiberhersteller
mindestens SQL-2 Entry-Level-Standard von 1992 erfüllen.
→ Was passiert bei Wechsel der Datenbank (Aufwand)?
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: [email protected]
ODBC & JDBC
ODBC & JDBC
→ Warum will man ODBC & JDBC?
→ Firmen setzen vernetzte Computersysteme ein
→ Daten werden meist zentral in DBMS verwaltet – nicht auf
Arbeitsplatzrechner
→ In vielen Firmen werden mehrere (verschiedene) DBMS genutzt
Gründe hierfür ...
→ wichtige Anwendung ist nur für bestimmtes DBMS verfügbar
→ Performanzeigenschaften bei bestimmten DB-Funktionen
→ gewachsene Systeme („alte Zöpfe“)
→ unterschiedliche Erfahrungen
Ein Beispiel für eine ODBC-Nutzung ...
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: [email protected]
ODBC
ODBC
→ Die Rolle von ODBC in einer komplexen Architektur ...
Excel
Access
Lohnabrechnung
Server
Client
ODBC Treiber Manager
Oracle
Treiber
MS SQL
Server
Treiber
SQL*Net
Net-Lib
Xbase
Treiber
Informix
Treiber
EDA/SQL
Treiber
DB2
Gateway
Treiber
Net-Lib
EDA-Link
Net-Lib
Net-Lib
EDA-Link
Net-Lib
dbf Files
SQL*Net
Net-Lib
Gateway
Oracle7
MS SQL
Server
Informix
Online
IBM DB2
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: [email protected]
ODBC
ODBC
→ Bestandteile einer ODBC-Architektur
→ Anwendungen
→ verantwortlich für Interaktion mit Benutzer
→ Aufruf von ODBC-API-Funktionen
→ Treiber-Manager
→ lädt bei Bedarf den jeweils von Anwendung geforderten
Treiber
1 nächste Folie
→ delegiert Funktionsaufrufe an zuständige Treiber
→ Treiber
→ verarbeiten ODBC-Funktionsaufrufe
2
→ richten SQL-Anfragen an Datenquellen
→ kapseln die gesamte DB- und Netzwerk-Funktionalität
Folien 9-11
→ Datenquellen
→ Datenmengen und entsprechende Umgebungen
→ kapseln Betriebssystem, DBMS (ggf. auch Netzwerk)
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: [email protected]
ODBC
ODBC
→ Bestandteile einer ODBC-Architektur – Treiber-Manager
→ Verwaltet gleichzeitig mehrere Clients und mehrere Treiber
→ Leitet Funktionsaufrufe an zuständige Treiber weiter
→ Fehlerüberprüfung
→ Verwaltung von „virtuellen Methodentabellen“ der Treiber
→ realisiert über DLLs oder shared objects
(je nach Betriebssystem)
→ Verwaltung über Handles (Verbindungs-/Environment-Handle)
→ Benutzungsoberfläche
→ Verbindung zur Datenquelle herstellen
→ Administration
→ Treiber hinzufügen, löschen ...
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: [email protected]
ODBC
ODBC
→ Bestandteile einer ODBC-Architektur – Treiber I
→ Ein-Stufen-Treiber
→ Ermöglicht Zugriff auf Dateibasis
→ Datenbank und Treiber befinden sich auf demselben Rechner
→ Treiber enthält komplette SQL-Datenbankengine:
übernimmt Parsing sowie Optimieren & Ausführen von SQLAnweisungen
→ Mehrbenutzerzugriff und Transaktionsverarbeitung werden
nicht unterstützt
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: [email protected]
ODBC
ODBC
→ Bestandteile einer ODBC-Architektur – Treiber II
→ Zwei-Stufen-Treiber
→ Ermöglich DB-Zugriff in klassischen Client/Server-Systemen
→ Drei Derivate:
→ Kommunikation über das DBMS-Datenprotokoll
Ersatz für die Client-Seite der proprietären DBMS-Software
(MS SQL)
→ Abbildung zwischen ODBC-API und DBMS-API
Übersetzer zwischen APIs (Oracle)
→ Zwischenschaltung von Middleware falls DBMS-Hersteller
keinen ODBC-Treiber hat (optional auch Bereitstellung
des Netzwerkprotokolls)
→ Übersetzung von ODBC-SQL in jeweiliges DBMS-SQL
→ Parsing, Syntax- & Semantikanalyse
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: [email protected]
ODBC
ODBC
→ Bestandteile einer ODBC-Architektur – Treiber III
→ Drei-Stufen-Treiber (Gateway Driver)
→ Einsatz eines Verbindungsrechners zwischen Client und Server
→ Performancegewinn durch Auslagerung des Clients
(bspw. Nutzung der Client-CPU für Cursorverwaltung)
→ Gateway hält üblicherweise Verbindungen zu mehreren Servern
→ Clients müssen nur einen Treiber verwenden
→ Vereinfachung der Administration
→ Verlagerung der Administration auf den Gateway-Rechner
→ Theoretisch können weitere Stufen nachgeschaltet werden
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: [email protected]
ODBC
ODBC
ODBC
...
ODBC
...
ODBC
...
JDBC
...
ODBC.
JDBC
...
JDBC
...
JDBC ...
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: [email protected]
JDBC
JDBC – JAVA Database Connectivity
→ ... verschiedene JDBC-Treibertypen
→ JDBC-ODBC-Bridge …
→ wird von SUN mitgeliefert
→ client-seitige Installation von ODBC-Treiber erforderlich
→ Plattformeigene Treiber: native-API partly JAVA driver …
→ client-seitige Installation eines DB-spezifischen Treibers erforderlich
→ bspw. Oracle Thick Driver (basiert auf SQL*Net)
→ Universelle Treiber: net-protocol fully JAVA driver …
→ Middleware-Server vermittelt auf verschiedene DBMS
→ bspw. Symantec dbAnyware
→ Direkte JDBC-Treiber: native-protocol fully JAVA driver …
→ baut DB-Client/Server-Protokoll via JAVA TCP/IP Sockets auf
(Package java.net)
→ bspw. Oracle Thin Driver (simuliert SQL*Net)
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: [email protected]
JDBC
JDBC – JAVA Database Connectivity
→ ... verschiedene JDBC-Treibertypen
JDBC-ODBC-Bridge
4
1
Direkte JDBC-Treiber
net-protocol fully JAVA technology-enabled driver …
Plattformeigene JDBC-Treiber
2
native-API partly JAVA technology-enabled driver …
3
Universelle JDBC-Treiber
native-protocol fully JAVA technology-enabled driver …
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: [email protected]
JDBC
JDBC – JAVA Database Connectivity
→ JDBC-ODBC-Bridge … (Typ 1)
Client
Applet-1
Web-Server
Applet-2
Applet-3
JDBC Driver Manager
JDBC/ODBC Bridge
Applet
ODBC-Driver-1
ODBC-Driver-2
DB-Server
ODBC-Driver-Manager
A JDBC-ODBC bridge provides JDBC-API access via one or more ODBC drivers. Note that some ODBC native code
and in many cases native client databases code must be loaded on each client machine that uses this type of driver.
Hence this kind of driver is generally most appropriate when automatic installation and downloading of a JAVA technology
application is not important.
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: [email protected]
JDBC
JDBC – JAVA Database Connectivity
→ Plattformeigene JDBC-Treiber … (Typ 2)
Client
Applet-1
Web-Server
Applet-2
Applet-3
JDBC Driver Manager
Oracle Thick JAVA Driver
Applet
SQL*Net
SQL*Net
DB-Server
A native-API partly JAVA technology-enabled driver converts JDBC calls into calls on the client API for ORACLE, Sybase,
Informix, DB2, or other DBMS. Note that like the bridge driver, this style of driver requires that some binary code be loaded
on each client machine. Hence this kind of driver is generally most appropriate when automatic installation and downloading of a JAVA technology application is not important.
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: [email protected]
JDBC
JDBC – JAVA Database Connectivity
→ Universelle JDBC-Treiber … (Typ 3)
<<download>>
Client
Web-Server
Applet-1
Applet-2
Applet-3
JDBC Driver Manager
dbAnywhere JAVA Client
Applet
dbAnywhere
Server
DB-Server
A net-protocol fully JAVA technology-enabled driver translates JDBC API calls into a DBMS independent net protocol which is then translated to a
DBMS protocol by a server. This net server middleware is able to connect all of ist JAVA technology-based clients to many different databases. The
specific protocol used depends on the vendor. In general, this is the most flexible JDBC API alternative. It is likely that all vendors of this solution will
provide products suitable for Intranet use. In order for these products to also support Internet access they must handle the additional requirements for
security, access through firewalls, etc., that the Web imposes. Several vendors are adding JDBC technology-based drivers to their existing database
middleware products.
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: [email protected]
JDBC
JDBC – JAVA Database Connectivity
→ Direkte JDBC-Treiber … (Typ 4)
<<download>>
Client
Applet-1
Web-Server
Applet-2
Applet-3
JDBC Driver Manager
Oracle Thin JAVA Driver
DB-Server
Applet
A native-protocol fully JAVA technology-enabled driver converts JDBC technology calls into the network protocol used by
the DBMSs directly. This allows a direct call from the client machine to the DBMS server and is a practical solution for
Intranet access. Since many of these protocols are proprietary the database vendors themselves will be the primary source
for this style of driver. Several database vendors have these in progress.
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: [email protected]
JDBC
JDBC – Grundlagen
→ Prinzipielles Vorgehen
→ Laden eines passenden DB-Treibers (z.B. Oracle Thin Driver)
und Treiberregistrierung
→ Aufbau der Verbindung (Connection)
→ Erzeugung eines kapselnden Objektes (das das StatementInterface implementiert)
→ Ausführung einer Anweisung (DML+DDL)
→ Bei DML: Verarbeiten des Ergebnisses (ResulSet; stellt
u.a. Cursor bereit)
→ Schließen des ResultSets
→ Schließen des “Statement-Objektes”
→ Schließen der Verbindung
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: [email protected]
JDBC
JDBC – JAVA Database Connectivity
→ JDBC-Beispiel (1/3)
→ Tabelle “Nodes”
CREATE TABLE Nodes (
NodeID
VARCHAR(128),
NodeName VARCHAR(128)
)
→ Laden eines passenden DB-Treibers (z.B. Oracle Thin Driver)
und Aufbau der Verbindung
try {
Class.forName ("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
System.out.println ("Treiber nicht geladen!");
e.printStackTrace();
}
Connection con = DriverManager.getConnection(
“jdbc:oracle:thin:@da.oder.dort:1521:oradb8“,“UName“,“pwd“
);
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: [email protected]
JDBC
JDBC – JAVA Database Connectivity
→ JDBC-Beispiel (2/3)
private void doQuery(String selectStatement)
throws SQLException, SQLWarning {
String columnName;
int
columnCount;
Object value;
1
// create a statement object so we can submit SQL statements
Statement stmt = con.createStatement();
2
// submit a query, creating a result object
ResultSet rs = stmt.executeQuery(selectStatement);
3
// get metadata
ResultSetMetaData meta_data = rs.getMetaData();
columnCount = meta_data.getColumnCount();
...
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: [email protected]
JDBC
JDBC – JAVA Database Connectivity
→ JDBC-Beispiel (3/3)
while (rs.next()) { // advance database cursor
for (int i=1; i<=columnCount; i++) {
value = rs.getObject(i);
// also: double d = rs.getDouble(i);
//
String s = rs.getString(i);
columnName = meta_data.getColumnName(i);
System.out.println(
columnName.toUpperCase() + “: “ + value);
} // End For
} // End While
// clean up, release resources
rs.close();
stmt.close();
}
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: [email protected]
JDBC
JDBC – JAVA Database Connectivity
→ JDBC: INSERT, UPDATE etc.
→ Neben SELECT werden auch andere Anweisungen unterstützt
(SELECT, UPDATE, DELETE, DDL-Anweisungen)
→ Die Methode int executeUpdate(String statement) liefert
als Ergebniswert die Anzahl der betroffenen Tupel – bspw.:
boolean b = s.execute(“INSERT INTO Person (PID, VNAME,
NNAME, PLZ, ORT) VALUES (1119,
‘Frank‘, ‘Köster‘, ‘26121‘, ‘Oldenburg‘)“);
...
int res = s.executeUpdate(“DELETE FROM Person WHERE
PID=“+pidTF.getText()); ...
sqlStr = “UPDATE Person SET VNAME=‘Frank‘, LNAME=‘Köster‘,
PLZ=‘26409‘, ORT=‘Wittmund‘ WHERE PID=1119“;
res = s.executeUpdate(sqlStr);
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: [email protected]
JDBC
JDBC – JAVA Database Connectivity
→ JDBC: Prepared & Callable Statements
→ Problem: Anweisungen (Statements) werden immer wieder neu
übersetzt … Prepared Statements als effizientere Alternative:
→ Zum Beispiel:
String insStr = “INSERT INTO Person VALUES(?,?)”);
PreparedStatement updateStmt;
updateStmt = con.prepareStatement(insStr);
…
updateStmt.setInt(1,1119);
updateStmt.setString(2, Frank);
…
int i = updateStmt.executeUpdate();
→ Anmerkung: Nicht alle DBMS erlauben Parametrisierung von
Tabellennamen.
→ Callable Statements ermöglichen den Aufruf von gespeicherten Prozeduren mit IN und OUT Parametern
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: [email protected]
JDBC
JDBC – JAVA Database Connectivity
→ JDBC: Transaktionssteuerung (1/3)
→ Nach dem Aufbau einer JDBC-Verbindung ist die Datenbank im
Auto-Commit-Modus. Es wird jede einzelne Anweisung als
Transaktion betrachtet und automatisch bestätigt.
→ Die Transaktionssteuerung erfolgt über die Methoden
commit() und rollback() des Interfaces
java.sql.Connection
→ Weitere Methoden sind getAutoCommit() und
setAutoCommit(boolean b)
Auto-Commit bedeutet hierbei, dass nach jeder Anweisung
automatisch ein commit erfolgt
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: [email protected]
JDBC
JDBC – JAVA Database Connectivity
→ JDBC: Transaktionssteuerung (2/3)
→ Es gibt verschiedene Transaktionsmodi …
int mode = con.getTransactionIsolation()
→ TRANSACTION_READ_UNCOMMITED
erlaubt Zugriff auf noch nicht bestätigte Daten (“dirty reads”) …
→ TRANSACTION_READ_COMMITED
nur lesen geschriebener Daten, das “unrepeatable reads”-Problem
kann auftreten …
→ TRANSACTION_REPEATABLE_READS
innerhalb einer Transaktion erneut gelesene Daten bleiben gleich;
jedoch kann das Phantom-Problem auftreten: bei erneutem Lesen
können z.B. zusätzliche Datensätze “auftauchen” …
→ TRANSACTION_SERIALIZABLE
höchste Stufe – volle Transaktionsunterstützung …
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: [email protected]
JDBC
JDBC – JAVA Database Connectivity
→ JDBC: Transaktionssteuerung (3/3)
Dirty Read:
Unrepeatable read:
Phantom:
T1: write(X)
T1: read(X)
T1: read range [x - y]
T2: read(X)
T2: write(X)
T2: insert z, x < z < y
T1: abort
T2: end transaction
T2: end transaction
T1: read(X)
T1: read range [x - y]
⇒ Read von T2
ist ungültig
⇒ T1 hat zwei
unterschiedliche
Werte für X gelesen
⇒ z ist ein PhantomItem
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: [email protected]
JDBC
JDBC – JAVA Database Connectivity
→ JDBC: Meta-Daten
→ Nutze ResultSet, um Daten über Ergebnisse einer Anfrage zu
erhalten:
ResultSetMetaData meta_data = rs.getMetaData();
…
columnCount = meta_data.getColumnCount();
→ Nutze DatabaseMetaData, um über umfangreiche Methoden auf
Detail wie Schema, Zugriffsrechte usw. eines DBMS abfragen zu
können:
DatabaseMetaData dbmd = con.getMetaData();
ResultSet rset = dbmd.getCatalogs();
int mv = dbmd.getDriverMajorVersion();
…
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: [email protected]
JDBC
JDBC – JAVA Database Connectivity
→ Abbildung von JDBC-/SQL-Datentypen in JAVA ...
JDBC/SQL Typ
JAVA Typ
CHAR,VARCHAR,LONGVARCHAR
java.lang.String
NUMERIC,DECIMAL
java.math.BigDecimal
BIT
boolean
TINYINT
byte
SMALLINT
short
INTEGER
int
BIGINT
long
REAL
float
FLOAT,DOUBLE
double
BINARY,VARBINARY,LONGVARBINARY
byte[]
DATE
java.sql.Date
TIME
java.sql.Time
TIMESTAMP
java.sql.Timestamp
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: [email protected]
Datenbanksysteme SS 2007
Ende von Kapitel 8a:
Datenbankapplikationen

Documents pareils