SQLJ

Werbung
1
Java zum Zugriff auf Datenbanken
SQLJ
Mahboubeh Pakdaman
15.01.2001
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?
/ 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.
4
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.
5
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.
6
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);
7
Prinzip von SQLJ
Data.sqlj
Data.java
SQLJ Translator
Data.class
Java Compiler
8
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.
9
Part 0-Die wichtigen SQLJKomponenten
/
Der Translator übersetzt ein gegebenes SQLJProgramm 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.
SQLJ-Klauseln
10
/
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.
11
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 SqlAnweisungn.
OUT
Ergebnis der Ausführung der SqlAnweisung zurück zum Java-Programm.
INOUT in beiden Richtungen gleichzeitig.
12
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))};
13
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.
14
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); }
15
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 .)
16
Der SQLJ-Translator und Profile
/
Aufgabe des sqlj-Translators:
1- Ersetzung der Klauseln durch entsprechenden javaCode mit Aufrufen:
> sqlj sqljDemo.sqlj
2- Syntaktisch und semantische Überprüfung der SqlAnweisungen(online und offline),
3- Generierung der Java-Codes für die deklarierten
Iteratoren- und Kontextklassen,
4- Erzeugung der Profile.
17
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
18
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
19
Java-Complierung
Translator
Java compiler Data.class
Profil0:
Data.sqlj
Data.java
Entry0
Profil0:
[ctx0]
Profil0
Entry0
{sql0}
Entry1
Profil0
[ctxo]
Profil1:
Entry1
{sql1}
Entry0
Profil1:
[ctx1]
Profil0.ser
Entry0
{sql2}
Entry0
Entry1
Entry0
Profil1.ser
20
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.
21
Gespeicherte Proz. mit Java
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.
23
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
24
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;
}
25
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 ;
26
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;
27
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.....
28
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.
Herunterladen