28
Java zum Zugriff auf Datenbanken SQLJ Mahboubeh Pakdaman 15.01.2001

Java zum Zugriff auf Datenbanken SQLJ Mahboubeh Pakdaman 15.01.2001

  • Upload
    ajaxe

  • View
    40

  • Download
    3

Embed Size (px)

DESCRIPTION

1. 1. Java zum Zugriff auf Datenbanken SQLJ Mahboubeh Pakdaman 15.01.2001. 2. 2. Ablauf. Was ist SQLJ? Warum SQLJ? Brauchen wir noch JDBC? Beispiele. Drei Teile der SQLJ-Spizifikation und die Anwendung dieser Konzepte. Fazit. 3. Was ist SQLJ?. - PowerPoint PPT Presentation

Citation preview

Page 1: Java zum Zugriff auf Datenbanken SQLJ Mahboubeh Pakdaman 15.01.2001

Java zum Zugriff auf DatenbankenSQLJ

Mahboubeh Pakdaman15.01.2001

1 1

Page 2: Java zum Zugriff auf Datenbanken SQLJ Mahboubeh Pakdaman 15.01.2001

Ablauf

Was ist SQLJ? Warum SQLJ? Brauchen wir noch JDBC? Beispiele. Drei Teile der SQLJ-Spizifikation und die Anwendung

dieser Konzepte. Fazit.

2 2

Page 3: Java zum Zugriff auf Datenbanken SQLJ Mahboubeh Pakdaman 15.01.2001

Was ist SQLJ?

SQLJ ist eine neue offene Standard Application Programming Interface(API) für die statische Einbettung in Java Programmen.

SQLJ ist eine Produktion von Oracle , IBM, Sybase, Tandom, Javasoft , Microsoft , XDB und Informix.

3

Page 4: Java zum Zugriff auf Datenbanken SQLJ Mahboubeh Pakdaman 15.01.2001

Warum SQLJ?

SQLJ vereinfacht Schreiben , Verwaltung und Debbugging Java Datenbase Applications.

SQLJ basiert auf dem Einbettungsprinzip ,d.h. SQL Anweisungen sind zur Übersetzungszeit definiert: 1. Weniger Fehlerträchtig. 2. Mächtiger und mehr vertrauenbar um Codes zu schreiben. 3. Java-Quelltext sind kompakt und besser lesbar.

4

Page 5: Java zum Zugriff auf Datenbanken SQLJ Mahboubeh Pakdaman 15.01.2001

Brauchen wir noch JDBC?

JA. statische SQL =========> SQLJ dynamische SQL =========> JDBC

SQLJ und JDBC sind interoperabil : Man kann die SQLJ und JDBC Anweisungen in ein SQLJ Application benutzen.

5

Page 6: Java zum Zugriff auf Datenbanken SQLJ Mahboubeh Pakdaman 15.01.2001

Beispiele JDBC

String name; int id=37115; float salary=2000; PreparedStatement pstm=con.preparedStatement( “SELECT ename FROM emp WHERE empno=? And sal >? ”) ; pstmt.setInt(1,id); pstmt.setFloat(2,salary); ResultSet rs=psmt.executeQuary(); while(rs.next()) { name=rs.getString(1); System.out.println(“Name is :”+name); } rs.close(); psmt.close();

SQLJ String name; int id=37115; float salary=2000; #sql {SELECT ename INTO :name FROM emp WHERE empno=:id AND sal> :salary}; System.out.println(“Name is :”+name);

6

Page 7: Java zum Zugriff auf Datenbanken SQLJ Mahboubeh Pakdaman 15.01.2001

Prinzip von SQLJ

Data.sqlj

SQLJ Translator

Data.java

Java Compiler

Data.class

7

Page 8: Java zum Zugriff auf Datenbanken SQLJ Mahboubeh Pakdaman 15.01.2001

Drei Teile der SQLJ-Spezifikation und die Anwendung dieser Konzepte

Part 0 : SQLJ Embedded -Die wichtigen SQLJ-Komponenten,

-Sqlj-klauseln und HostVariablen/Ausdrücken -Itratoren -Kontexte -Der Sqlj-Translator und Profile

Part 1 : SQLJ gesteuerte Prozeduren/Funktionen - Benutzen Java static Funktionen als gesteuerte

Prozeduren /Funktionen.

Part 2 : SQLJ Datentypen - Nutzung von Java Klassen zur Implementierung

von SQL Datentypen.

8 8

Page 9: Java zum Zugriff auf Datenbanken SQLJ Mahboubeh Pakdaman 15.01.2001

Part 0-Die wichtigen SQLJ-Komponenten

Der Translator übersetzt ein gegebenes SQLJ-Programm in ein entsprechendes Java-Programm.

Das Laufzeitsystem ist im Java-Package sqlj.runtime definiert und besteht aus Menge von Java-Klassen die den Datenbankzugriff realisieren.

Ein Customizer ist ein Komponent, das das erzeugte Profil an ein DBMS anpasst.

9

Page 10: Java zum Zugriff auf Datenbanken SQLJ Mahboubeh Pakdaman 15.01.2001

SQLJ-Klauseln Sqlj-Klauseln bilden den Mechanismus zur Einbettung von

Sql in Java-Code. Es gibt zwei Formen: 1.Deklarationen von Java-Klassen für Iteratoren und

Kontexte sowie 2.Ausführbare Sql-Anweisungen:

# sql { SQL-Operationen} ; - Select Anweisungen und Ausdrücken. - Anweisungen zum Auslesen von Daten (select..into,fetch). - Die DML-Operationen(insert, update und delete). - DDL-Operationen(create table). - Aufruf von gespeicherte Prozeduren und Funktionen.

10 10

Page 11: Java zum Zugriff auf Datenbanken SQLJ Mahboubeh Pakdaman 15.01.2001

Host-Variablen/-Ausdrücken Ein Host-Ausdruck ist ein Ausdruck in Java , der in

einer SQL-Klausel zum Datenaustausch eingesetzt wird.

Kennzeichnung: “:”+(Richtung der Datenübertrag)+Ausdrücken Richtung der Datenübergang (IN,OUT,INOUT): IN Übergang von Java-Werten an die Sql- Anweisungn. OUT Ergebnis der Ausführung der Sql- Anweisung zurück zum Java-Programm. INOUT in beiden Richtungen gleichzeitig.

11 11

Page 12: Java zum Zugriff auf Datenbanken SQLJ Mahboubeh Pakdaman 15.01.2001

Beispiele

void updateStock ( Sting isbn , int stock )throws Exception{ #sql { UPDATE book SET stock=:stock where isbn=:isbn};

}

string findBook (String isbn)throws Exception{ String title; #sql {SELECT title INTO :title FROM book where isbn=:isbn};

}

#sql { INSERT INTO book_order VALUES ( :IN (++orderID), :IN custId), :IN(Date.ValueOf(“1999-09-16”)), 0) };

#sql price={ VALUES( compute-price(:IN orderNo))};

12

Page 13: Java zum Zugriff auf Datenbanken SQLJ Mahboubeh Pakdaman 15.01.2001

Iteratoren

Iterator ist ein Cursor-basierter Mechanismus für den Zugriff auf Mengen von Ergebnistupeln(vergleichbar mit ResultSet von JDBC). Iteratoren sind streng typisiert.

Nutzung: 1- Definition der Iterator-Klasse durch eine Sql-Deklaration. 2- Vereinbarung einer Iterator-Variablen. 3- Aufruf der Sql-Anweisung mit Instanziierung eines Iterator-Objekt. 4- Navigation über die Ergebnismenge und Auslesen der Daten. 5- Freigabe der Ressourcen durch Schließen des Iterators.

Es gibt zwei Arten von Iteratoren.

1313

Page 14: Java zum Zugriff auf Datenbanken SQLJ Mahboubeh Pakdaman 15.01.2001

Iteratoren Benannte Iteratoren: Zugriff über die Spaltennamen

#sql public iterator Byname( String isbn , String title ); Byname iter; #sql iter={ SELECT isbn , title FROM book }; while( iter.next()){ System.out.println(“isbn=”+iter.isbn()); System.out.println(“title=”+iter.title()); } iter.close();

Positionierte Iteratoren:Zugriff über die Host-Variablen #sql iterator ByPos( String, flaot); ByPos iter ; String title; float price; #sql iter={ SELECT title, price From book}; while(true) { #sql{ FETCH : iter INTO :title , : price}; if(iter.endFetch()) break; System.out.println(“title=”+title); System.out.println(“price=”+price); } iter.close();

14

Page 15: Java zum Zugriff auf Datenbanken SQLJ Mahboubeh Pakdaman 15.01.2001

Verbindungskontexte

Eine Datenbankverbindung wird in SQLJ durch einen Verbindungskontext repräsentiert.Es gibt: - Defaultkontext(die einfachsteVerbindungskontext) - Kontextumschaltung(für mehrere Verbindungen). - Kontextqualifizierung. - Kontextklassen ( sie sind insbesondere sinvoll für eine semantische Überprüfung der Sql-Klauseln durch den Sqlj- Translator .)

15

Page 16: Java zum Zugriff auf Datenbanken SQLJ Mahboubeh Pakdaman 15.01.2001

Der SQLJ-Translator und Profile

Aufgabe des sqlj-Translators: 1- Ersetzung der Klauseln durch entsprechenden java- Code mit Aufrufen: > sqlj sqljDemo.sqlj 2- Syntaktisch und semantische Überprüfung der Sql- Anweisungen(online und offline), 3- Generierung der Java-Codes für die deklarierten Iteratoren- und Kontextklassen, 4- Erzeugung der Profile.

16

Page 17: Java zum Zugriff auf Datenbanken SQLJ Mahboubeh Pakdaman 15.01.2001

Profile

Sind serialisierte Instanzen mit der “.ser” Endung.

werden von dem Translator generiert.

enthalten Informationen über die Sql-Operationen über Typ und Übergabeparameter und Ergebnisdaten.

Dienen zur Customization.

Beispiel

17

Page 18: Java zum Zugriff auf Datenbanken SQLJ Mahboubeh Pakdaman 15.01.2001

Beispiel Sql-Klausel aus klasse SqlDemo:

#sql {UPDATE book SET stock=:stock Where isbn=:isbn };

Profildatei : profile SqlDemo_SJProfile0 entry 0 #sql { UPDATE book SET stock=? Where isbn =? }; line number :27 PREPARED_STATEMENT executed via EXECUTE_UDATE role is STATEMENT descriptor is null contain 2 parameters : 1.mode : IN , java type : int (int), sql type: INTEGER , name: stock, maker index: 25 2.mode: IN java type: java.lang.String(java.lang.String) , sql tpye: VARCHER , name: isbn, maker index : 50 result set type is NO_RESULT result set name is null contains no result colums

18

Page 19: Java zum Zugriff auf Datenbanken SQLJ Mahboubeh Pakdaman 15.01.2001

Java-Complierung

Data.sqljTranslator

[ctx0]{sql0}[ctxo]{sql1}[ctx1]{sql2}

Data.sqljTranslator

[ctx0]{sql0}[ctxo]{sql1}[ctx1]{sql2}

Profil0:Entry0Profil0Entry1

Data.sqljTranslator

[ctx0]{sql0}[ctxo]{sql1}[ctx1]{sql2}

Data.sqljTranslator

[ctx0]{sql0}[ctxo]{sql1}[ctx1]{sql2}

Profil0:Entry0Profil0Entry1

Data.sqljTranslator

[ctx0]{sql0}[ctxo]{sql1}[ctx1]{sql2}

Data.sqljTranslator

[ctx0]{sql0}[ctxo]{sql1}[ctx1]{sql2}

Profil0:Entry0

Entry0

Profil0Entry1

Entry1

Entry0

Profil0.ser

Profil1.ser

Profil1:Entry0

Profil0:Entry0Profil0Entry1Profil1:Entry0

Java compiler Data.class

Data.java

19

Page 20: Java zum Zugriff auf Datenbanken SQLJ Mahboubeh Pakdaman 15.01.2001

Part 1: SQLJ gespeicherte Prozeduren/Funktionen

Sie sind die Prozeduren /Funktionen , die im Datenbankserver gespeichert und ausgeführt werden Vorteile: 1. lokale Zugriff und zentrale Verwaltung, 2. reduzierte Netzwerkbelastung, 3. gesteigerte Performance, 4. Anwendung von Datenbankdiensten, 5. gesenkte Administrationsaufwand, 6. unabhängig von der Client-Umgebung und im beliebigen Sprachen implementierbar.

20

Page 21: Java zum Zugriff auf Datenbanken SQLJ Mahboubeh Pakdaman 15.01.2001

Gespeicherte Proz. mit Java

Java- Prozedur

APPL......CALL proce......

APPL....CALL proce.....

APPL....CALL proce....

-----------------------------------------------------------------------

Methoden

JAVA-VM

21

Page 22: Java zum Zugriff auf Datenbanken SQLJ Mahboubeh Pakdaman 15.01.2001

Entwicklung von gespeicherten Prozeduren/Funktionen

Implementierung : Es ist für einen direkten Datenzugriff mit Sql notwendig.

Installation im Server(jar-Archiv): Der Code der Prozedur wird zum Server übertragen.

Registrierung(CREATE Prozedur/Funktion): Die Prozedur wird dem Sql-System bekannt gemacht.

Aufruf(CALL bzw. VALUES): Die Prozeduren sind von Client-Anwendung nutzbar.

Page 23: Java zum Zugriff auf Datenbanken SQLJ Mahboubeh Pakdaman 15.01.2001

Implementierung keine GUI_Funktionen realisierbar,

Keine Zugriff auf das Lokale Datensystem ist erlaubt,

Nur Default-Verbindung zur lokalen Datenbank,

Prozeduren /Funktionen sind als Klassenmethoden zu Implementiert(static-methoden ),

Es gibt drei Formen von Prozeduren: 1.no SQL, 2.reads SQL data, 3.modifies SQL data. 4.contains SQL

23

Page 24: Java zum Zugriff auf Datenbanken SQLJ Mahboubeh Pakdaman 15.01.2001

Beispiel

#sql iterator Iter ( double sum); public static double price (int orderNO)throws SQLException { Iter iter; double res=0.0; #sql iter = { SELECT SUM(b.price * oi.num) From order_item oi , book b Where oi.order_id=:orderno AND oi.isbn=b.isbn}; if(iter.next()) res=iter.sum(); return res; }

24

Page 25: Java zum Zugriff auf Datenbanken SQLJ Mahboubeh Pakdaman 15.01.2001

Installation und Registrierung

Installation : jar-Archiv CALL sqlj.install_jar ('url' ,' name', deploy)

Registrierung : CREATE Procedure sql-Name( SQL-Signature ) SQL-Eigenschaften External NAME Externe-java-Referenz LANGUAGE JAVA PARAMETER STYL JAVA ;

25

Page 26: Java zum Zugriff auf Datenbanken SQLJ Mahboubeh Pakdaman 15.01.2001

Beispiel Die gespeicherte Prozedur

public class Routines { public static double dm2euro ( double val) { return val/1.95583;} }

Installation > javac -d . Routines.java. > jar cf routines.jar Routines.class CALL sqlj.install_jar (' file: ~/routines.jar' , 'routines_jar ' , 0);

Registrierung CREATE FUNKTION dm2euro ( v FLOAT ) RETURNS FLOAT NO SQL

EXTERNAL NAME 'routines_jar:Routines.dm2euro' LANGUAGE JAVA PARAMETER STYLE JAVA;

26

Page 27: Java zum Zugriff auf Datenbanken SQLJ Mahboubeh Pakdaman 15.01.2001

Java-Klassen für benutzer definierte SQL-Datentypen (SQLJ Part 2)

Installation der Java-Klassen im Datenbankserver und deren Nutzung als echte SQL_Datentypen.

Implementierung der Schnittstelle java.io.Serializable oder java.sql.SQLData

Installation: CALL sql.install_jar( 'url' , ' klass_name ');

Registrierung: CREATE.....

27

Page 28: Java zum Zugriff auf Datenbanken SQLJ Mahboubeh Pakdaman 15.01.2001

Fazit

SQLJ und JDBS arbeiten zusammen, um ein complete Set von Optionen für statische und dynamische SQL anzubieten.

SQLJ bringt mehr Produktivität und bessere Qualität mit.

SQLJ macht Java viel mehr akzeptabel für viele Business Applikationen.

28