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