Top Banner
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. . Ullman - CS145 - Herbst 2004 - Stanford University, bezogen von www.odbms.org
34

Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

Apr 06, 2016

Download

Documents

Gesche Sommer
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

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

Page 2: Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

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 variablerepresenting the optimizedform of whatever statementis typed into :query

Jeffrey D. Ullman - CS145 - Herbst 2004 - Stanford University, bezogen von www.odbms.org

Page 3: Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

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

Page 4: Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

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

Page 5: Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

WS2006/2007 Vorlesung: Datenbanken und Internet Copyright 2006 – DBIS/Dr. Karsten Tolle

Nachtrag ESQL

• SELECT * FROM myTable WHERE <var>Ist dies dynamisches oder statisches

SQL?

Page 6: Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

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.

Page 7: Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

WS2006/2007 Vorlesung: Datenbanken und Internet Copyright 2006 – DBIS/Dr. Karsten Tolle

Vorläufiger ScheduleNr. Datum Vorlesung Übung

1 20.10.2006 Einführung, Vorstellung der Themen keine Übung

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   keine Übung

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   keine Übung

12 19.01.2007EDI, EDIFACT, Universal Business

Language  

13 26.01.2007 Semanitc Web - Ziele und Geschichte  

14 02.02.2007 RDF, OWL  

15 09.02.2007 Reserve Ausblicke und Zusammenfassung

Page 8: Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

WS2006/2007 Vorlesung: Datenbanken und Internet Copyright 2006 – DBIS/Dr. Karsten Tolle

CLI – Call Level Interface

Page 9: Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

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

Page 10: Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

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

Page 11: Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

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 CLI-Implementierung zum Ansteuern von Datenbanken genutzt.

Page 12: Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

WS2006/2007 Vorlesung: Datenbanken und Internet Copyright 2006 – DBIS/Dr. Karsten Tolle

Anwendung 1

Elementare Zugriffs-

operationen

Anwendung 2

Elementare Zugriffs-

operationen

Anwendung 3

Elementare Zugriffs-

operationen

Datenbank- Management-

system (DBMS)

Datenbank (DB)

DBS

Anwendung 1 Zugriffsoperation

en in Progr.-Sprache enthalten

Anwendung 2 Zugriffsoperation

en in Progr.-Sprache enthalten

Anwendung 3 Zugriffsoperation

en in Progr.-Sprache enthalten

Datenbank- Management-

system (DBMS)

Datenbank (DB)

DBS

Call Level Interface

Page 13: Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

WS2006/2007 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 1

Anwendung 2

Anwendung 3

Oracle

Datenbank (DB)

Call Level Interface

IBM DB2

Datenbank (DB)

Page 14: Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

WS2006/2007 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.

Page 15: Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

WS2006/2007 Vorlesung: Datenbanken und Internet Copyright 2006 – DBIS/Dr. Karsten Tolle

• Programmierschnittstellen, die das CLI-Konzept umsetzen (CLI-Implementierungen), sind:– Open Database Connectivity (ODBC),– Java Database Connectivity (JDBC).

Page 16: Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

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)

Page 17: Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

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

Page 18: Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

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)

Page 19: Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

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 Data-

Source, Connection-Pooling, verteilte Transaktionen– JDBC 2.0 Treiber sind für die fast alle (bekannteren)

RDBMS vorhanden

*Java 2 Standard Edition (JSE2) – auch Java2

Page 20: Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

WS2006/2007 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!

Page 21: Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

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)

Page 22: Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

WS2006/2007 Vorlesung: Datenbanken und Internet Copyright 2006 – DBIS/Dr. Karsten Tolle

JDBC-Treiber-Typen

Type 4 Type 3 Type 1 Type 2

Bilder von: http://java.sun.com/products/jdbc/overview.html

Page 23: Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

WS2006/2007 Vorlesung: Datenbanken und Internet Copyright 2006 – DBIS/Dr. Karsten Tolle

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-ODBC-Bridge-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.

Type 1

Bilder von: http://java.sun.com/products/jdbc/overview.html

Page 24: Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

WS2006/2007 Vorlesung: Datenbanken und Internet Copyright 2006 – DBIS/Dr. Karsten Tolle

JDBC-Treiber-Typen

• Ein Typ-2-Treiber kommuniziert über eine plattformspezifische Programmbibliothek mit dem Datenbankserver. Das bedeutet, dass für jede Betriebssystem-Plattform zu dem Typ-2-Treiber eine zusätzliche Programmbibliothek benötigt wird.

Type 2

Bilder von: http://java.sun.com/products/jdbc/overview.html

Page 25: Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

WS2006/2007 Vorlesung: Datenbanken und Internet Copyright 2006 – DBIS/Dr. Karsten Tolle

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-3-Treiber 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.

Type 3

Bilder von: http://java.sun.com/products/jdbc/overview.html

Page 26: Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

WS2006/2007 Vorlesung: Datenbanken und Internet Copyright 2006 – DBIS/Dr. Karsten Tolle

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 Typ-3-Treiber sein, ist aber weniger flexibel.

• Typ-4-Treiber eignen sich gut für Intranet-Lösungen, die schnelle Netzprotokolle nutzen wollen.

Type 4

Bilder von: http://java.sun.com/products/jdbc/overview.html

Page 27: Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

WS2006/2007 Vorlesung: Datenbanken und Internet Copyright 2006 – DBIS/Dr. Karsten Tolle

JDBC in Schichten-Architektur

DBS

Java Anwendung

JDBC

Zwei-Schichen-Architektur(Two-Tier-Modell)

Client

Server

z.B. Web, LAN, proprietäres Protokoll …

DBS DB-Server

Application Server

JDBC

Client

Drei-Schichten-Architektur(Three-Tier-Modell)

Applet, Java GUI, …

z.B. HTTP, RMI

Servlet, Java Anwendung, …

Page 28: Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

WS2006/2007 Vorlesung: Datenbanken und Internet Copyright 2006 – DBIS/Dr. Karsten Tolle

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

2. Treiber im Program laden und aktivieren, Beispiel:try {

Class.forName(jdbcdriver);} catch (Exception e) {}

3. Verbindung herstellen, Beispiel:try {

Connection con = DriverManager.getConnection(dburl, username, passwd);

} catch (Exception e) {}

Page 29: Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

WS2006/2007 Vorlesung: Datenbanken und Internet Copyright 2006 – DBIS/Dr. Karsten Tolle

Praxis4. SQL Statement (Objekt) erzeugen

Statement stmt = con.createStatement();5. SQL Anfrage erzeugen und an DBS schicken:

ResultSet rs = stmt.executeQuery(“select * from myTable”);

6. Mit dem Ergebnis arbeiten:while (rs.next()) {

String name = rs.getString(“Name”);System.out.println(“Name = “+name);

}

Page 30: Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

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

Page 31: Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

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

Page 32: Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

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…

Page 33: Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

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

Page 34: Dynamic SQL Preparing a query: EXEC SQL PREPARE FROM ; Executing a query: EXEC SQL EXECUTE ; “Prepare” = optimize query. Prepare once, execute many times.

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