CLI_JDBC_ODBC_03.11

Werbung
Dynamic SQL
• Preparing a query:
EXEC SQL PREPARE <query-name>
FROM <text of the query>;
• Executing a query:
EXEC SQL EXECUTE <query-name>;
• “Prepare” = optimize query.
• Prepare once, execute many times.
Jeffrey D. Ullman - CS145 - Herbst 2004 - Stanford University, bezogen von www.odbms.org
Example: A Generic
Interface
EXEC SQL BEGIN DECLARE SECTION;
char query[MAX_LENGTH];
EXEC SQL END DECLARE SECTION;
while(1) {
/* issue SQL> prompt */
/* read user’s query into array query */
EXEC SQL PREPARE q FROM :query;
EXEC SQL EXECUTE q;
q is an SQL variable
representing the optimized
}
form of whatever statement
is typed into :query
Jeffrey D. Ullman - CS145 - Herbst 2004 - Stanford University, bezogen von www.odbms.org
Execute-Immediate
• If we are only going to execute the query
once, we can combine the PREPARE and
EXECUTE steps into one.
• Use:
EXEC SQL EXECUTE IMMEDIATE <text>;
Jeffrey D. Ullman - CS145 - Herbst 2004 - Stanford University, bezogen von www.odbms.org
Example: Generic Interface Again
EXEC SQL BEGIN DECLARE SECTION;
char query[MAX_LENGTH];
EXEC SQL END DECLARE SECTION;
while(1) {
/* issue SQL> prompt */
/* read user’s query into array
query */
EXEC SQL EXECUTE IMMEDIATE :query;
}
Jeffrey D. Ullman - CS145 - Herbst 2004 - Stanford University, bezogen von www.odbms.org
Nachtrag ESQL
• SELECT * FROM myTable WHERE <var>
Ist dies dynamisches oder statisches SQL?
WS2006/2007
Vorlesung: Datenbanken und Internet
Copyright 2006 – DBIS/Dr. Karsten Tolle
SQL-Injection
• SQL-Injection – Einschleusen von
zusätzlichem Code oder SQL-Befehlen
– Siehe Wikipedia für weitere Infos, Bsp. und
Gegenmaßnahmen:
http://de.wikipedia.org/wiki/SQL_Injection
– Generell ist eine Webanwendung für die
korrekte Prüfung der Eingabedaten
verantwortlich. Geeignete Schutzmaßnahmen
sind in erster Linie dort zu implementieren.
WS2006/2007
Vorlesung: Datenbanken und Internet
Copyright 2006 – DBIS/Dr. Karsten Tolle
Vorläufiger Schedule
Nr.
Datum
Vorlesung
1
20.10.2006
Einführung, Vorstellung der Themen
2
27.10.2006
Embedded SQL
3
03.11.2006
JDBC, ODBC, SQLJ
4
10.11.2006
Persistenz: Hibernate, JDO
5
17.11.2006
keine Vorlesung
6
24.11.2006
Einführung in XML Teil 1
7
01.12.2006
Einführung in XML Teil 2
8
08.12.2006
Umgang mit XML
9
15.12.2006
XML und Datenbanken
10
22.12.2006
Einführung in Web Services
29.12.2006
Vorlesungsfrei Weihnachten
05.01.2007
Vorlesungsfrei Weihnachten
11
12.01.2007
keine Vorlesung
12
19.01.2007
EDI, EDIFACT, Universal Business Language
13
26.01.2007
Semanitc Web - Ziele und Geschichte
14
02.02.2007
RDF, OWL
15
09.02.2007
Reserve
WS2006/2007
Übung
keine Übung
keine Übung
keine Übung
Ausblicke und Zusammenfassung
Vorlesung: Datenbanken und Internet
Copyright 2006 – DBIS/Dr. Karsten Tolle
CLI – Call Level Interface
WS2006/2007
Vorlesung: Datenbanken und Internet
Copyright 2006 – DBIS/Dr. Karsten Tolle
Definition
• Das Call Level Interface (kurz CLI) ist
eine Datenbankschnittstellen-Spezifikation
für den Zugriff auf RDBMS (baut auf SQL
auf) aus anderen Anwendungen heraus.
• Weitere Details unter:
http://www.opengroup.org/products/publications/catalog/c451.htm
– PDF des Technical Standards von 1995!
~320 Seiten
WS2006/2007
Vorlesung: Datenbanken und Internet
Copyright 2006 – DBIS/Dr. Karsten Tolle
Nebel im Akronym Dschungel
2) CLI - Calling Line Identification
3) CLI - Clear Interrupt Flag
4) CLI - Client Library Interface
5) CLI - Command Line Interface
6) CLI - Command Line Interpreter
7) CLI - Common Language Interface
WS2006/2007
Vorlesung: Datenbanken und Internet
Copyright 2006 – DBIS/Dr. Karsten Tolle
• Bei CLI handelt es sich um so genannte
Middleware, mit deren Hilfe aus beliebigen
Anwendungen auf beliebige relationale
Datenbanken zugegriffen werden kann.
• Ähnlich wie Gerätetreiber zum Ansteuern
der Hardware wird die CLIImplementierung zum Ansteuern von
Datenbanken genutzt.
WS2006/2007
Vorlesung: Datenbanken und Internet
Copyright 2006 – DBIS/Dr. Karsten Tolle
Anwendung 1
Anwendung 2
Elementare
Zugriffsoperationen
Elementare
Zugriffsoperationen
DatenbankManagementsystem
(DBMS)
Anwendung 3
Elementare
Zugriffsoperationen
Anwendung 1
Anwendung 2
Anwendung 3
Zugriffsoperation
en in Progr.Sprache enthalten
Zugriffsoperation
en in Progr.Sprache enthalten
Zugriffsoperation
en in Progr.Sprache enthalten
Call Level Interface
DBS
Datenbank
(DB)
WS2006/2007
DatenbankManagementsystem
(DBMS)
DBS
Datenbank
(DB)
Vorlesung: Datenbanken und Internet
Copyright 2006 – DBIS/Dr. Karsten Tolle
Vorteile CLI zu ESQL
• Kein Precompiler nötig.
• Vorteil für Client/Server Architektur, da unabhägig
von Zieldatenbank
Anwendung 2
Anwendung 1
Anwendung 3
Call Level Interface
WS2006/2007
Oracle
IBM DB2
Datenbank
(DB)
Datenbank
(DB)
Vorlesung: Datenbanken und Internet
Copyright 2006 – DBIS/Dr. Karsten Tolle
Zum Selberlesen …
• Die CLI-Implementierung bildet die Befehlssätze
verschiedener DBMS auf eine immer gleiche
Funktionsbibliotek ab.
 für das Programm an sich ist es unwichtig, mit
welcher Datenbank es arbeitet.
• Das CLI hat also die Funktion eines
Übersetzers, der Programmaufrufe in eine
„Sprache“ übersetzt, die die Datenbank versteht
und umgekehrt Daten, die von der Datenbank
zurückgeliefert werden, so formatiert, dass sie
vom Programm verarbeitet werden können.
WS2006/2007
Vorlesung: Datenbanken und Internet
Copyright 2006 – DBIS/Dr. Karsten Tolle
• Programmierschnittstellen, die das CLIKonzept umsetzen
(CLI-Implementierungen), sind:
– Open Database Connectivity (ODBC),
– Java Database Connectivity (JDBC).
WS2006/2007
Vorlesung: Datenbanken und Internet
Copyright 2006 – DBIS/Dr. Karsten Tolle
ODBC
• Von Microsoft – erste Umsetzung des CLI
• Anfangs entwickelt für C und C++
• Entwickelt für Microsoft OS – aber geht
auch unter UNIX, …
• ODBC Data Source Administrator unter
Windows: Start – Systemsteuerung –
Verwaltung – Datenquellen (ODBC)
WS2006/2007
Vorlesung: Datenbanken und Internet
Copyright 2006 – DBIS/Dr. Karsten Tolle
ODBC Data Source Administrator
• In diesem Tool können Data Source
Names (DSN) vergeben werden.
• DSN kann anschließend im Code zum
Verbindungsaufbau verwendet werden.
• … weitere Infos, z.B. unter:
http://aktuell.de.selfhtml.org/artikel/cgiperl/odbc/
… dort Perl mit MS Access
Beispieldatenbank Nordwind
WS2006/2007
Vorlesung: Datenbanken und Internet
Copyright 2006 – DBIS/Dr. Karsten Tolle
ODBC für Java?
• ODBC ist für C entwickelt, entspricht
daher nicht den Java (OO) Paradigmen
• Plattformunabhägigkeit kann mit ODBC
nicht gewährleistet werden (nur Windows,
eingeschränkt UNIX)
– Zugriff bei ODBC erfolgt über OS
• Konkurenz zwischen
Microsoft (ODBC) und SUN (JDBC)
WS2006/2007
Vorlesung: Datenbanken und Internet
Copyright 2006 – DBIS/Dr. Karsten Tolle
Java Database Connectivity
• JDBC 1.0 (Januar 1997)
– jdbc.sql.* als optionales Paket
– Basierend auf SQL92
• JDBC 2.0
– java.sql.* in JSE2* (batch-updates, SQL3-Datentypen)
– javax.sql.* (optional ab Java 1.3 fest) enthält DataSource, Connection-Pooling, verteilte Transaktionen
– JDBC 2.0 Treiber sind für die fast alle (bekannteren)
RDBMS vorhanden
*Java
WS2006/2007
2 Standard Edition (JSE2) – auch Java2
Vorlesung: Datenbanken und Internet
Copyright 2006 – DBIS/Dr. Karsten Tolle
Java Database Connectivity
• JDBC 3.0
– Teil von Java 1.4 - neu unter anderem:
•
•
•
•
•
•
Savepoints in Transaktionen,
Wiederverwendung von PreparedStatements,
JDBC-Datentypen BOOLEAN und DATALINK,
Abrufen automatisch generierter Keys,
Änderungen von LOBs (Large Objects) und
mehrere gleichzeitig geöffnete ResultSets
• JDBC 4.0
– Teil von Java 1.6 – neu hier:
• Annotationen für SQL-Queries, Treiber werden – wenn
vorbereitet – automatisch angemeldet, XMLDatentypen aus
SQL:2003, Zugriff auf die SQL ROWID
– Noch sehr neu und kaum zu finden!
WS2006/2007
Vorlesung: Datenbanken und Internet
Copyright 2006 – DBIS/Dr. Karsten Tolle
Java Database Connectivity
• JDBC eigens für Java entwickelt
– Folgt den Java Paradigmen
– „Write once run anywhere“
• Über JDBC-ODBC Bridge können auch
ODBC Datenbanken (falls JDBC nicht vom
DBMS unterstützt wird)
WS2006/2007
Vorlesung: Datenbanken und Internet
Copyright 2006 – DBIS/Dr. Karsten Tolle
Bilder von: http://java.sun.com/products/jdbc/overview.html
JDBC-Treiber-Typen
Type 4
WS2006/2007
Type 3
Type 1
Vorlesung: Datenbanken und Internet
Type 2
Copyright 2006 – DBIS/Dr. Karsten Tolle
Bilder von: http://java.sun.com/products/jdbc/overview.html
JDBC-Treiber-Typen
• Ein JDBC-Typ-1-Treiber
kommuniziert ausschließlich über
einen JDBC-ODBC-Bridge-Treiber.
Damit ist ein Typ-1-Treiber
abhängig von einem installierten
ODBC-Treiber. Der JDBC-ODBCBridge-Treiber wandelt JBDC- in
ODBC-Anfragen um.
• Ein Typ-1-Treiber wird dann
verwendet, wenn es zu der
Datenbank keine eigenständigen
JDBC-Treiber gibt.
WS2006/2007
Vorlesung: Datenbanken und Internet
Type 1
Copyright 2006 – DBIS/Dr. Karsten Tolle
Bilder von: http://java.sun.com/products/jdbc/overview.html
JDBC-Treiber-Typen
• Ein Typ-2-Treiber kommuniziert
über eine plattformspezifische
Programmbibliothek mit dem
Datenbankserver. Das bedeutet,
dass für jede BetriebssystemPlattform zu dem Typ-2-Treiber
eine zusätzliche
Programmbibliothek benötigt wird.
Type 2
WS2006/2007
Vorlesung: Datenbanken und Internet
Copyright 2006 – DBIS/Dr. Karsten Tolle
Bilder von: http://java.sun.com/products/jdbc/overview.html
JDBC-Treiber-Typen
• Mittels des Typ-3-Treibers werden die
JDBC-API-Befehle in DBMS-Befehle des
Datenbankservers übersetzt und (über
ein Netzwerkprotokoll) an einen
Middleware-Treiber an den
Datenbankserver übertragen. Ein Typ-3Treiber benötigt damit keine
plattformspezifischen Bibliotheken und
muss auch nichts über den verwendeten
Datenbankserver wissen.
• Typ-3-Treiber eignen sich sehr gut für
Internet-Protokolle im Zusammenhang
mit Firewalls.
WS2006/2007
Vorlesung: Datenbanken und Internet
Type 3
Copyright 2006 – DBIS/Dr. Karsten Tolle
Bilder von: http://java.sun.com/products/jdbc/overview.html
JDBC-Treiber-Typen
• Diese Variante kommuniziert wie
der Typ-3-Treiber. Allerdings wird
die Kommunikation direkt mit dem
Datenbankserver aufgenommen.
Ein Middleware-Treiber wird dabei
nicht verwendet. Damit kann ein
Typ-4-Treiber schneller als ein Typ3-Treiber sein, ist aber weniger
flexibel.
• Typ-4-Treiber eignen sich gut für
Intranet-Lösungen, die schnelle
Netzprotokolle nutzen wollen.
WS2006/2007
Vorlesung: Datenbanken und Internet
Type 4
Copyright 2006 – DBIS/Dr. Karsten Tolle
JDBC in Schichten-Architektur
Java
Anwendung
Applet, Java GUI, …
Client
Client
JDBC
z.B. HTTP, RMI
z.B. Web, LAN,
proprietäres Protokoll …
Servlet, Java
Anwendung, …
Application
Server
JDBC
DBS
Server
DBS
Zwei-Schichen-Architektur
(Two-Tier-Modell)
WS2006/2007
DB-Server
Drei-Schichten-Architektur
(Three-Tier-Modell)
Vorlesung: Datenbanken und Internet
Copyright 2006 – DBIS/Dr. Karsten Tolle
Praxis
1.
2.
3.
JDBC Treiber für DBMS in Classpath aufnehmen, Beispiel:
set JDBC_Driver="C:\MySQL\mysql-connector-java-3.1.6-bin.jar"
java –classpath %JDBC_Driver% MyAnwendung
Treiber im Program laden und aktivieren, Beispiel:
try {
Class.forName(jdbcdriver);
} catch (Exception e) {}
Verbindung herstellen, Beispiel:
try {
Connection con =
DriverManager.getConnection(dburl, username, passwd);
} catch (Exception e) {}
WS2006/2007
Vorlesung: Datenbanken und Internet
Copyright 2006 – DBIS/Dr. Karsten Tolle
Praxis
4.
5.
6.
SQL Statement (Objekt) erzeugen
Statement stmt = con.createStatement();
SQL Anfrage erzeugen und an DBS schicken:
ResultSet rs = stmt.executeQuery(“select * from myTable”);
Mit dem Ergebnis arbeiten:
while (rs.next()) {
String name = rs.getString(“Name”);
System.out.println(“Name = “+name);
}
WS2006/2007
Vorlesung: Datenbanken und Internet
Copyright 2006 – DBIS/Dr. Karsten Tolle
Prepared Statements
…
PreparedStatement stmt = null;
stmt = con.prepareStatement(“select * from
mytable where ID = ?”);
stmt.setInt(1,4);
ResultSet rs = stmt.executeQuery();
…
WS2006/2007
Vorlesung: Datenbanken und Internet
Copyright 2006 – DBIS/Dr. Karsten Tolle
Statisches SQL - SQLJ
• Benötigt Precompiler des DBMS-Herstellers!
• Überprüfungen durch Precompiler – Syntax und
Semantik (DB-Objekte richtig geschrieben?)
• Schreibweise kompakter als JDBC
• Während der Laufzeit wird JDBC verwendet! 
Plattformunabhängig
WS2006/2007
Vorlesung: Datenbanken und Internet
Copyright 2006 – DBIS/Dr. Karsten Tolle
SQLJ - Beispiel
…
#sql cur0 = {SELECT * FROM org};
while (true) {
// retrieve and display the result from the SELECT statement
#sql {FETCH :cur0
INTO :deptnumb, :deptname, :manager, :division, :location};
if (cur0.endFetch()) { break; }
System.out.println(" " + Data.format(deptnumb, 8) +
" " + Data.format(deptname, 14) +
" " + Data.format(manager, 7) +
" " + Data.format(division, 10) +
" " + Data.format(location, 14));
}
cur0.close(); // close the cursor
…
WS2006/2007
Vorlesung: Datenbanken und Internet
Copyright 2006 – DBIS/Dr. Karsten Tolle
Performance Vergleich
http://www-128.ibm.com/developerworks/db2/library/techarticle/0204pooloth/0204pooloth.html
WS2006/2007
Vorlesung: Datenbanken und Internet
Copyright 2006 – DBIS/Dr. Karsten Tolle
Performance Vergleich
http://www-128.ibm.com/developerworks/db2/library/techarticle/0204pooloth/0204pooloth.html
WS2006/2007
Vorlesung: Datenbanken und Internet
Copyright 2006 – DBIS/Dr. Karsten Tolle
Herunterladen