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

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

Embed Size (px)

Citation preview

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

Embedded SQL in Java

Michael StapfBerater Strategische ProjekteORACLE Deutschland GmbH

JAVA DAYS ´98

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

© 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

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

3© 1998 Sun Microsystems GmbH

JAVA DAYS ´98

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

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

© 1998 Sun Microsystems GmbH

JAVA DAYS ´98

Niederlassung Niederlassung Niederlassung

BackupBackup

Neue Neue AnwendungenAnwendungen

SoftwareSoftwareUpgradeUpgrade

Client/Server Verteilungskosten

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

© 1998 Sun Microsystems GmbH

JAVA DAYS ´98

Einsparpotential durch Network Computing

Niederlassung Niederlassung Niederlassung

Anwendungs-Server

Datenbank-Server

BackupBackup

Data Center

PC oder NC:Browser

Neue Neue AnwendungenAnwendungen

SoftwareSoftwareUpgradeUpgrade

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

6© 1998 Sun Microsystems GmbH

JAVA DAYS ´98

Java Unternehmens-Strategie

Java als die Sprache für Enterprise Network Computing

- ENTERPRISE CLASS JAVA SERVERENTERPRISE CLASS JAVA SERVER Plattform

- Infrastruktur für serverbasierte Java-Anwendungen

- Java VM

- JDBC-Treiber, Embedded SQL in Java: SQLJSQLJ

- Enterprise JavaBeans, CORBA

- Komponentenbasierte Java-Entwicklungswerkzeuge welche diese Plattform ausnutzen und unterstützen

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

© 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

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

© 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

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

© 1998 Sun Microsystems GmbH

JAVA DAYS ´98

Elemente von SQLJ

Standardisierter Sprachsyntax

Gemeinsame Spezifikation verschiedener Hersteller

SQLJ Translator

Frei verfügbare Referenz-Implementierung

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

© 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

SQLJPräprozessor

Java-Codemit

JDBC-Aufrufen

Java Compiler Java

*.class Datei

DBMS

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

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

JDBCJDBCResultSet results;

#sql results = {SELECT ename FROM emp WHERE sal > :salparam AND deptno = :deptnoparam};

SQLJSQLJ

8 fehleranfällige Anweisungen2 einfache Anweisungen

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

12© 1998 Sun Microsystems GmbH

JAVA DAYS ´98

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.

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

© 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

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

© 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

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

15© 1998 Sun Microsystems GmbH

JAVA DAYS ´98

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

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

© 1998 Sun Microsystems GmbH

JAVA DAYS ´98

SQLJ Client/Server-Verteilung

Java Anwendung

herstellerspez. C/S-Protokoll

PC

SQLJ RuntimeJDBC Typ 2

DBMS

SQLSQLSQLSQLStoredStored

ProceduresProceduresStoredStored

ProceduresProcedures

SQLJ ist für Client/Server Java Anwendungen einsetzbar

Java Application, SQLJ Runtime, und JDBC Typ 2 Treiber auf dem Client

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

© 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 Listenerhttp Dispatcher

HTTP

FIREWALL

BROWSER

Anwendungs- Server

SQLJAnwendungSQLJ Runtime

JDBC Typ 2SQL*Net

DBMS

SQLSQLSQLSQLStoredStored

ProceduresProceduresStoredStored

ProceduresProcedures

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

© 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 4SQL*Net

DBMS

SQLSQLSQLSQLStoredStored

ProceduresProceduresStoredStored

ProceduresProcedures

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

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

© 1998 Sun Microsystems GmbH

JAVA DAYS ´98

SQLJ Translator in der Datenbank

herstellerspez.C/S-Protokoll

IIOP

SQL*Net

ORACLE

SQL, Stored ProceduresSQL, Stored ProceduresSQL, Stored ProceduresSQL, Stored Procedures

JAVA VMJAVA VMJAVA VMJAVA VMEmbedded SQLJEmbedded SQLJEmbedded SQLJEmbedded SQLJ

Embedded JDBC DriverEmbedded JDBC DriverEmbedded JDBC DriverEmbedded JDBC Driver

DBMS

Java VMJava VM

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

© 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

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

© 1998 Sun Microsystems GmbH

JAVA DAYS ´98

SQLJ Translator

Sprachkonstrukte

- Überblick

- Ausführbare SQL-Klauseln

- Connection Management

- Result Set Iterator Objekte

Translator Werkzeug

Vorteile

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

© 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

SQLJ Sprachübersicht

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

© 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 KlauselnAusführbare Klauseln

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

© 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 = 25000.0;

#sql { UPDATE emp SET sal = :salary WHERE ename = :name };

Bind-Variablen können lokale Variablen, Parameter oder Felder sein

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

© 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

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

© 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( “jdbc:oracle:thin:@localhost:1521:orcl”, user, password);

Installation als default Verbindung DefaultContext.setDefaultContext(ctx);

Oder explizit in einer ausführbaren Klausel #sql [ctx] { SQL operation };

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

© 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

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

© 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

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

© 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)

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

© 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

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

© 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

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

© 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 };

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

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

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

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

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

© 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

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

© 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

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

© 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

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

© 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

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

© 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.url=jdbc:oracle:thin:@localhost:1521:orclsqlj.password=tiger

Herstellerspezifische Einstellungen

- Zu verwendende JDBC-Treiber

- Zu verwendende SQL Checker

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

© 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

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

© 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

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

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

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

© 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

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

© 1998 Sun Microsystems GmbH

JAVA DAYS ´98

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

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

© 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

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

© 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

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

© 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 …

}

}

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

© 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)

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

© 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 (

"jdbc:oracle:thin:@oudelsrv-1:5521:orcl", // 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();

}

}

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

© 1998 Sun Microsystems GmbH

JAVA DAYS ´98

Beispiel 2import 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 (

"jdbc:oracle:thin:@oudelsrv-1:5521:orcl", // 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 };

}

}

}

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

© 1998 Sun Microsystems GmbH

JAVA DAYS ´98

Beispiel 3import 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 (

"jdbc:oracle:thin:@oudelsrv-1:5521:orcl", // 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();

}

}

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

© 1998 Sun Microsystems GmbH

JAVA DAYS ´98

Weitere Informationen über SQLJ

- Freier Download von: http://www.oracle.com/produkte/free_software/#sqlj

- Kommentare an :

[email protected]