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
Java zum Zugriff auf DatenbankenSQLJ
Mahboubeh Pakdaman15.01.2001
1 1
Ablauf
Was ist SQLJ? Warum SQLJ? Brauchen wir noch JDBC? Beispiele. Drei Teile der SQLJ-Spizifikation und die Anwendung
dieser Konzepte. Fazit.
2 2
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
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
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
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
Prinzip von SQLJ
Data.sqlj
SQLJ Translator
Data.java
Java Compiler
Data.class
7
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
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
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
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
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
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
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
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
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
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
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
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
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
Gespeicherte Proz. mit Java
Java- Prozedur
APPL......CALL proce......
APPL....CALL proce.....
APPL....CALL proce....
-----------------------------------------------------------------------
Methoden
JAVA-VM
21
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.
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
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
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
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
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
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