Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Embedded SQL in Java Michael Stapf Berater Strategische Projekte

Ähnliche Präsentationen


Präsentation zum Thema: "Embedded SQL in Java Michael Stapf Berater Strategische Projekte"—  Präsentation transkript:

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

2 Agenda Java im Unternehmen Embedded SQL in Java: SQLJ Warum Java?
Vorteile Strategie Embedded SQL in Java: SQLJ Einleitung Verteilungskonfigurationen SQLJ Translator Beispiele

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 Client/Server Verteilungskosten
Neue Anwendungen Niederlassung Backup Software Upgrade

5 Einsparpotential durch Network Computing
Niederlassung Niederlassung Niederlassung PC oder NC: Browser Backup Neue Anwendungen Software Upgrade Anwendungs- Server Datenbank- Server Data Center

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

7 Agenda Java im Unternehmen Embedded SQL in Java: SQLJ Warum Java?
Vorteile Strategie Embedded SQL in Java: SQLJ Einleitung Verteilungskonfigurationen SQLJ Translator Beispiele

8 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 Elemente von SQLJ Standardisierter Sprachsyntax
Gemeinsame Spezifikation verschiedener Hersteller SQLJ Translator Frei verfügbare Referenz-Implementierung

10 Der SQLJ Translator SQLJ-Code *.sqlj Datei Java-Code mit JDBC- Aufrufen Java *.class Datei SQLJ Präprozessor Java Compiler DBMS 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

11 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(); ResultSet results; #sql results = {SELECT ename FROM emp WHERE sal > :salparam AND deptno = :deptnoparam}; 8 fehleranfällige Anweisungen 2 einfache Anweisungen 27

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 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 Agenda Java im Unternehmen Embedded SQL in Java: SQLJ Warum Java?
Vorteile Strategie Embedded SQL in Java: SQLJ Einleitung Verteilungskonfigurationen SQLJ Translator Beispiele

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 SQLJ Client/Server-Verteilung
PC Java Anwendung DBMS SQLJ Runtime herstellerspez. C/S-Protokoll SQL JDBC Typ 2 Stored Procedures SQLJ ist für Client/Server Java Anwendungen einsetzbar Java Application, SQLJ Runtime, und JDBC Typ 2 Treiber auf dem Client

17 SQLJ Verteilung auf den Anwendungs-Server
BROWSER http Listener http Dispatcher HTTP HTML- Seite SQLJ Anwendung SQL*Net DBMS SQL Stored Procedures herstellerspez. C/S-Protokoll SQLJ Runtime JDBC Typ 2 Anwendungs- Server FIREWALL SQLJ kann für die “3 tier” Verteilung genutzt werden JDBC Typ 2 und DBMS-Client verteilt auf den Anwendungs-Server

18 SQLJ Thin Client Verteilung
BROWSER Web Server HTTP Java Anwendung SQL*Net DBMS SQL Stored Procedures SQLJ Runtime herstellerspez. Protokoll (TCP/IP) JDBC Typ 4 Gleiche Maschine 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 SQLJ Translator in der Datenbank
DBMS ORACLE IIOP JAVA VM Java VM Embedded SQLJ SQL*Net herstellerspez. C/S-Protokoll Embedded JDBC Driver SQL, Stored Procedures

20 Agenda Java im Unternehmen Embedded SQL in Java: SQLJ Warum Java?
Vorteile Strategie Embedded SQL in Java: SQLJ Einleitung Verteilungskonfigurationen SQLJ Translator Beispiele

21 SQLJ Translator Sprachkonstrukte Translator Werkzeug Vorteile
Überblick Ausführbare SQL-Klauseln Connection Management Result Set Iterator Objekte Translator Werkzeug Vorteile

22 SQLJ Sprachübersicht 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

23 Ausführbare Klauseln 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

24 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 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 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 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 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 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 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 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 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 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 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 SQLJ Translator Sprachkonstrukte Translator Werkzeug Vorteile
Translator Installation und Setup SQLJ Programmübersetzung und Java Kompilierungsanweisungen Nutzung eines SQL Checkers während der Übersetzung Vorteile

36 SQLJ Setup Installation Setup Nutzerumgebung
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 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 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 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 SQLJ Translator Sprachkonstrukte Translator Werkzeug Vorteile
Höheres Abstraktionsniveau als bei JDBC Frühe Überprüfung der statischen SQL- Anweisungen Stark typisierte Iteratoren

41 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 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 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 Stark getypte Iteratoren
Stark getypte Iteratoren bieten eine Typüberprüfung durch Java Iteratoren sind Java Objektse Sind deklarierbar, übergebar an Methoden und zurückgebar als Ergebnisse

45 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 Agenda Java im Unternehmen Embedded SQL in Java: SQLJ Warum Java?
Vorteile Strategie Embedded SQL in Java: SQLJ Einleitung Verteilungskonfigurationen SQLJ Translator Beispiele

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

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

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

52 Weitere Informationen über SQLJ
Freier Download von: Kommentare an :


Herunterladen ppt "Embedded SQL in Java Michael Stapf Berater Strategische Projekte"

Ähnliche Präsentationen


Google-Anzeigen