Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Embedded SQL in Java Michael Stapf Berater Strategische Projekte ORACLE Deutschland GmbH JAVA DAYS ´98.

Ähnliche Präsentationen


Präsentation zum Thema: "Embedded SQL in Java Michael Stapf Berater Strategische Projekte ORACLE Deutschland GmbH JAVA DAYS ´98."—  Präsentation transkript:

1 Embedded SQL in Java Michael Stapf Berater Strategische Projekte ORACLE Deutschland GmbH JAVA DAYS ´98

2 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 Agenda Java im Unternehmen - Warum Java? - Vorteile - Strategie Embedded SQL in Java: SQLJ - Einleitung - Verteilungskonfigurationen - SQLJ Translator - Beispiele

3 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 3 Warum Java im Unternehmen? Java ist bereit die dominierende Sprache für unternehmenskritische Anwendungen zu werden Java - eine hochproduktive Programmiersprache - Objektorientiert, Komponentenmodelle - Know-how verfügbar Java ist geeignet für eine neue Klasse von Unternehmens-Anwendungen - Unternehmens-Anwendungen migrieren von Client/Server hin zu Thin Client-basierten Intranets

4 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 Niederlassung Backup Backup Neue Anwendungen SoftwareUpgrade Client/Server Verteilungskosten

5 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 Einsparpotential durch Network Computing Niederlassung Anwendungs- Server Datenbank- Server Backup Backup Data Center PC oder NC: Browser Neue Anwendungen SoftwareUpgrade

6 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 6 Java Unternehmens-Strategie Java als die Sprache für Enterprise Network Computing - ENTERPRISE CLASS JAVA SERVER - ENTERPRISE CLASS JAVA SERVER Plattform - Infrastruktur für serverbasierte Java-Anwendungen - Java VM SQLJ - JDBC-Treiber, Embedded SQL in Java: SQLJ - Enterprise JavaBeans, CORBA - Komponentenbasierte Java-Entwicklungswerkzeuge welche diese Plattform ausnutzen und unterstützen

7 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 Agenda Java im Unternehmen - Warum Java? - Vorteile - Strategie Embedded SQL in Java: SQLJ - Einleitung - Verteilungskonfigurationen - SQLJ Translator - Beispiele

8 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 Embedded SQL in Java: SQLJ SQLJ ermöglicht Anwendungsentwicklern: - Einbettung von SQL-Anweisungen in Java-Programmen - Präprozessor zur Übersetzung von SQLJ in Java-Code mit JDBC-Aufrufen - Laufzeitumgebung: Nutzung von JDBC-Treibern beliebiger Hersteller SQLJ verbessert die Entwicklungsproduktivität - Wesentlich kompakterer Code als mit JDBC - Typüberprüfung von SQL-Anweisungen zur Kompilierungszeit - Wartbare und einfacher zu schreibende Java-Programme

9 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 Elemente von SQLJ Standardisierter Sprachsyntax Gemeinsame Spezifikation verschiedener Hersteller SQLJ Translator Frei verfügbare Referenz-Implementierung

10 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 Der SQLJ Translator Der Precompiler generiert Standard Java Sourcecode mit JDBC-Aufrufen Überprüft die SQL-Anweisungen gegen die Datenbank Der generierte Code wird wie jedes andere Java- Programm kompiliert SQLJ-Code *.sqlj Datei SQLJ Präprozessor Java-Code mit JDBC- Aufrufen Java Compiler Java *.class Datei DBMS

11 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 Vergleich JDBC mit SQLJ java.sql.CallableStatement stmt; Connection conn; ResultSet results; conn = DriverManager.getConnection (jdbc:default); stmt = conn.prepareStatement (SELECT ename FROM emp WHERE sal > ? AND deptno = ?); stmt.setInteger(1, salparam); stmt.setInteger(2, deptnoparam); results = stmt.executeQuery(); JDBC ResultSet results; #sql results = {SELECT ename FROM emp WHERE sal > :salparam AND deptno = :deptnoparam}; SQLJ 8 fehleranfällige Anweisungen2 einfache Anweisungen

12 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 12 SQLJ Standardisierung SQLJ Partner: Compaq/Tandem, IBM, Informix, Javasoft, Oracle, Sybase und andere SQLJ Translator - SQLJ-Sprachspezifikation wurde beim ANSI/ISO-Komitee eingereicht - Die Translatoren verschiedener Hersteller sind kompatibel Generiert Java-Code 100% kompatibel mit der JDBC Spezifikation - Binärportabilität von SQLJ Stored Procedures Integrierbar mit Standard Java-Werkzeugen - Source Level Debugger etc.

13 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 SQLJ Standardisierung Bestandteile: - Part 0: Standard Syntax für Stored Procedures und Trigger in Java - Part 1: Syntax für Embedded SQL in Java

14 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 Agenda Java im Unternehmen - Warum Java? - Vorteile - Strategie Embedded SQL in Java: SQLJ - Einleitung - Verteilungskonfigurationen - SQLJ Translator - Beispiele

15 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 15 Verteilungskonfigurationen SQLJ bietet verschiedene Möglichkeiten - Client/Server mit JDBC Typ 2 Treibern - Thin Clients mit JDBC Typ 4 Treibern - 3-tier Anwendungen mit Typ 2 Treibern - SQLJ in der Datenbank

16 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 SQLJ Client/Server-Verteilung Java Anwendung herstellerspez. C/S-Protokoll PC SQLJ Runtime JDBC Typ 2 DBMS SQLSQL Stored Procedures SQLJ ist für Client/Server Java Anwendungen einsetzbar Java Application, SQLJ Runtime, und JDBC Typ 2 Treiber auf dem Client

17 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 herstellerspez. C/S-Protokoll SQLJ Verteilung auf den Anwendungs-Server SQLJ kann für die 3 tier Verteilung genutzt werden JDBC Typ 2 und DBMS-Client verteilt auf den Anwendungs- Server HTML- Seite http Listener http Dispatcher HTTP FIREWALL BROWSER Anwendungs- Server SQLJ Anwendung SQLJ Runtime JDBC Typ 2 SQL*Net DBMS SQLSQL Stored Procedures

18 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 SQLJ Thin Client Verteilung herstellerspez. Protokoll (TCP/IP) HTTP Web Server Gleiche Maschine BROWSER Java Anwendung SQLJ Runtime JDBC Typ 4 SQL*Net DBMS SQLSQL Stored Procedures Herunterladbare Applets verbinden sich direkt mit der Datenbank Java Security-Anforderungen Datenbank muß sich auf der gleichen Maschine befinden wie der Webserver Keine Restriktionen für JDK 1.1 Signed Applets

19 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 SQLJ Translator in der Datenbank herstellerspez. C/S-Protokoll IIOP SQL*Net ORACLE SQL, Stored Procedures JAVA VM Embedded SQLJ Embedded JDBC Driver DBMS Java VM

20 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 Agenda Java im Unternehmen - Warum Java? - Vorteile - Strategie Embedded SQL in Java: SQLJ - Einleitung - Verteilungskonfigurationen - SQLJ Translator - Beispiele

21 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 SQLJ Translator Sprachkonstrukte - Überblick - Ausführbare SQL-Klauseln - Connection Management - Result Set Iterator Objekte Translator Werkzeug Vorteile

22 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 Ein SQLJ-Programm ist ein Java-Programm mit eingebetteten SQLJ-Konstrukten SQLJ-Konstrukte beginnen mit #sql und enden mit ; Es gibt zwei Arten von SQLJ-Klauseln Ausführbar Deklarativ SQLJ Sprachübersicht

23 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 Ein auführbares Konstrukt enthält SQL in geschweiften Klammern #sql { INSERT INTO emp (ename, sal) VALUES ('Scott', 35000) }; Text innerhalb der geschweiften Klammern nutzt SQL Regeln, ansonsten Java Regeln Ausführbare Klauseln sind dort einsetzbar wo auch Java Blockanweisungen erlaubt sind Ausführbare Klauseln

24 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 Bind-Variablen Ausführbare Konstrukte können Java Bind-Variablen enthalten. Gekennzeichnet durch vorangestellten Doppelpunkt ':' String name = SMITH; double salary = ; #sql { UPDATE emp SET sal = :salary WHERE ename = :name }; Bind-Variablen können lokale Variablen, Parameter oder Felder sein

25 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 Bind-Variablen: Unterstützte Typen Standard JDBC Typen - boolean, byte, short, int, long, double, float - String, byte[] - java.sql.Date, java.sql.Time, java.sql.Timestamp Java Wrapper Klassen - Boolean, Byte, Short, Integer, Long, Double, Float Stream Klassen (package sqlj.runtime) - BinaryStream, AsciiStream, UnicodeStream Herstellerspezifische Typen

26 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 Runtime Connection zur Datenbank Laden des JDBC-Treibers wie in einer JDBC-Session Class.forName (oracle.jdbc.driver.OracleDriver); Erzeugung einer Datenbankverbindung DefaultContext ctx = new DefaultContext( user, password); Installation als default Verbindung DefaultContext.setDefaultContext(ctx); Oder explizit in einer ausführbaren Klausel #sql [ctx] { SQL operation };

27 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 Deklaration des ConnectionContext ConnectionContext Klassen sind auch explizit deklarierbar #sql context MyContext; Deklariert eine Klasse die zur Ausführung von SQL- Anweisungen nutzbar ist MyContext myCtx = new MyContext(url, user, password); #sql [myCtx] { … }; Deklarationen können dort eingesetzt werden wo auch Klassendeklarationen erlaubt sind

28 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 Connection Management Mehrere Verbindungskontexte können gleichzeitig instantiiert und genutzt werden Verschiedene Verbindungskontext-Klassen können zur Partitionierung von Anweisungen die in verschiedenen Schemas ausgeführt werden genutzt werden Zur Übersetzungszeit kann für jede Verbindungskontext-Klasse eine unterschiedliche SQL-Überprüfung vorgenommen werden

29 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 Ausführung einer Abfrage Definition eines Iterator-Typs Erzeugung einer Instanz des Iterator-Typs Füllen des Iterators mit Abfrageergebnissen Nutzung der Iterator-Methoden um auf Abfragespalten per Namen zuzugreifen (Named Iterator) ODER FETCH..INTO Syntax für den Zugriff auf Abfragespalten per Position (Positional Iterator)

30 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 Definition eines Named Iterator Typs Explizite Bereitstellung der Java Namen und Typen der Abfragespalten Die Java-Names der Iterator-Spalten sollten mit den SQL-Namen in der Abfrage übereinstimmen Die Iterator-Typen Definition sollte dort eingesetzt werden wo eine Java- Klassendefinition erlaubt ist

31 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 Beispiel eines Named Iterator #sql iterator EmpIter (String ENAME, double SAL); Dies definiert eine Klasse EmpIter mit unter anderem folgenden Methoden: boolean next(); // gets next row, // if any String ENAME (); // gets column ENAME // as String double SAL (); // gets column SAL // as double void close (); // closes iterator

32 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 Einsatz des Iterators für eine Abfrage Deklaration einer Variablen des Iterator Typs Instantiierung des Iterator-Typs mit einer SQL-Abfrage EmpIter emps; #sql emps = { SELECT ename, sal FROM emp };

33 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 Holen der Abfragespalten next() füllt den Iterator mit dem Result Set der aktuellen Zeile der Abfrage (nutzt den Spaltennamen) Lesen der Daten mit den Iterator-Methoden while (emps.next ()) { String ename = emps.ENAME (); double sal = emps.SAL (); … } Schließen des Iterators zur Ressourcenfreigabe emps.close();

34 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 Beispiel eines Positional Iterators Positional Iterator Typen holen Abfragespalten per Position (nicht per Name) #sql iterator EmpIter2 (String, double); … EmpIter2 emps; #sql emps = { SELECT ename, sal FROM emp }; while (true) { String ename = null; double sal = 0.0; #sql { FETCH :emps INTO :ename, :sal}; if (emps.endFetch()) break;... } emps.close();

35 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 SQLJ Translator Sprachkonstrukte Translator Werkzeug - Translator Installation und Setup - SQLJ Programmübersetzung und Java Kompilierungsanweisungen - Nutzung eines SQL Checkers während der Übersetzung Vorteile

36 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 SQLJ Setup Installation - SQLJ benötigt JDK 1.1 oder höher - SQLJ ist ein reines Java Programm, daher muß nur der CLASSPATH angepasst werden um die SQLJ-Klassen zu finden Setup Nutzerumgebung - %JAVA_HOME%\sqlj\lib\translator.zip im CLASSPATH - %JAVA_HOME%\sqlj\bin im PATH

37 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 Kompilierung eines SQLJ-Programms Übersetzung des SQLJ Programms % sqlj [options] Beispiel1.sqlj (erzeugt java Datei + Serialized Profiles) Kompilierung der sich ergebenden Java-Datei % javac Beispiel1.java Ablauf des Programms % java Beispiel1

38 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 Verbindung zur Datenbank zur Übersetzungszeit Ermöglicht statische SQL-Überprüfung SQLJ Translator verbindet sich zur Datenbank, und überprüft ob Tabellen und Stored Procedures im Schema enthalten sind. Der Translator überprüft ob die SQL Anweisungen für die vorkommenden Tabellen und Prozeduren korrekt sind. Umgebungsargumente: Das default Schema zum Login, der JDBC Treiber, etc. -- können in die properties Datei eingetragen werden

39 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 SQLJ Properties Datei Short-cut für lange Kommandozeilen Benennung: sqlj.properties Ermöglicht für Benutzer die Online-Überprüfung sqlj.user=scott Andere Einstellungen für die Übersetzung sqlj.password=tiger Herstellerspezifische Einstellungen - Zu verwendende JDBC-Treiber - Zu verwendende SQL Checker

40 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 SQLJ Translator Sprachkonstrukte Translator Werkzeug Vorteile - Höheres Abstraktionsniveau als bei JDBC - Frühe Überprüfung der statischen SQL- Anweisungen - Stark typisierte Iteratoren

41 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 SQLJ: Höherer Abstraktionsgrad als JDBC SQLJ unterstützt eine default Verbindung JDBC-Anweisungsobjekte sind verborgen SQL-Anweisungen können mehrere Zeilen umfassen Bind-Variablen sind direkt in SQL- Operationen eingebettet Automatisches Behandlung von Null-Werten

42 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 SQLJ: Prägnanter als JDBC int n = 17950; // SQLJ #sql {insert into EMP values (:n)}; // JDBC Statement stmt = conn.prepareStatement ("insert into EMP values (?)"); stmt.setInt (1, n); stmt.execute (); stmt.close ();

43 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 Frühe Typen-Überprüfung Date d = new Date (1993,3,11); // SQLJ #sql {insert into EMP (sal) values (:d)}; Translator überprüft die Typen der Java Variablen gegen SQL-Typen Wirft einen Type Mismatch Error Ein äquivalentes JDBC-Programm würde nur einen Laufzeitfehler verursachen SQLJ-Programme sind robust

44 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 Stark getypte Iteratoren Stark getypte Iteratoren bieten eine Typüberprüfung durch Java Iteratoren sind Java Objekts e Sind deklarierbar, übergebar an Methoden und zurückgebar als Ergebnisse

45 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 Gegenüberstellung SQLJ und JDBC SQLJ ist eine Sprache für statisches SQL SQLJ ist ein reines Java- Programm welches JDBC zur Laufzeit nutzt SQLJ-Programme sind für jede Datenbank anpassbar Performance - setzt auf JDBC auf + statische Optimierung JDBC ist ein API für dynamisches SQL JDBC-Treiber können mittels C, Java, … implementiert werden JDBC-Treiber können Datenbank-spezifische Eigenschaften enthalten

46 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 Agenda Java im Unternehmen - Warum Java? - Vorteile - Strategie Embedded SQL in Java: SQLJ - Einleitung - Verteilungskonfigurationen - SQLJ Translator - Beispiele

47 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 Beispiele BeispielTemplate.sqlj import sqlj.runtime.*; // Use SQLJ runtime import sqlj.runtime.ref.*; // More SQLJ runtime import java.sql.*; // Use JDBC too … iterator declarations go here … class ExampleTemplate { public static void main (String args []) throws SQLException { … hier SQLJ Code einfügen … }

48 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 SQLJ Beispiele Example1.sqlj : Ausgabe der Namen und Gehälter aller Angestellten - Abfrage die ENAME und SAL der Tabelle EMPLOYEE selektiert. ENAME wird als Java String und SAL als Java double geholt. Example2.sqlj: Gehaltserhöhung für alle Mitarbeiter - Deklaration eines Iterators um alle Namen und Gehälter der Mitarbeiter zu erhalten - Update des Gehalts jedes Mitarbeiters mittles Java Bind-Variablen Example3.sqlj : (wie Beispiel 1 nur mit positional Iterator)

49 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 Beispiel 1 import java.sql.*; import sqlj.runtime.*; // SQLJ runtime classes import sqlj.runtime.ref.*; // SQLJ runtime classes #sql iterator EmpIter1 (String ENAME, double SAL); public class Example1 { public static void main (String args[]) throws SQLException { try { // Connect to the database Class.forName("oracle.jdbc.driver.OracleDriver"); DefaultContext.setDefaultContext( new DefaultContext ( // url "scott", // user "tiger" )); // password } catch (Exception e) { System.out.println("Error connecting to database."); } // Query the employee names EmpIter1 emps; #sql emps = { select ename, sal from emp order by ename }; while (emps.next()) { System.out.println( emps.ENAME() + " earns " + emps.SAL()); } emps.close(); }

50 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 Beispiel 2 import java.sql.*; import sqlj.runtime.*; // SQLJ runtime classes import sqlj.runtime.ref.*; // SQLJ runtime classes #sql iterator EmpIter2 (float pay, String who); public class Example2 { public static void main (String args[]) throws SQLException { try { // Connect to the database Class.forName("oracle.jdbc.driver.OracleDriver"); DefaultContext.setDefaultContext( new DefaultContext ( // url "scott", // user "tiger" )); // password } catch (Exception e) { System.out.println("Error connecting to database."); } // Query employee names and salaries EmpIter2 emps; #sql emps = { select sal as "pay", ename as "who" from emp order by ename }; // Give each employee a 20% raise while (emps.next()) { float pay = emps.pay(); String who = emps.who(); #sql { update emp set sal = 1.2 * :pay where ename = :who }; }

51 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 Beispiel 3 import java.sql.*; import sqlj.runtime.*; // SQLJ runtime classes import sqlj.runtime.ref.*; // SQLJ runtime classes #sql iterator EmpIter3 (String, double); public class Example3 { public static void main (String args[]) throws SQLException { try { // Connect to the database Class.forName("oracle.jdbc.driver.OracleDriver"); DefaultContext.setDefaultContext( new DefaultContext ( // url "scott", // user "tiger" )); // password } catch (Exception e) { System.out.println("Error connecting to database."); } // Query the employee names EmpIter3 emps; #sql emps = { select ename, sal from emp order by ename }; String ename = null; double sal = 0.0; while (true) { #sql {FETCH :emps INTO :ename, :sal}; if (emps.endFetch()) break; System.out.println(ename + " earns " + sal); } emps.close(); }

52 © 1998 Sun Microsystems GmbH JAVA DAYS ´98 Weitere Informationen über SQLJ - Freier Download von: ware/#sqlj - Kommentare an :


Herunterladen ppt "Embedded SQL in Java Michael Stapf Berater Strategische Projekte ORACLE Deutschland GmbH JAVA DAYS ´98."

Ähnliche Präsentationen


Google-Anzeigen