1 / 28

Java zum Zugriff auf Datenbanken SQLJ Mahboubeh Pakdaman 15.01.2001

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?.

ajaxe
Download Presentation

Java zum Zugriff auf Datenbanken SQLJ Mahboubeh Pakdaman 15.01.2001

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 1 1 Java zum Zugriff auf DatenbankenSQLJMahboubeh Pakdaman15.01.2001

  2. 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. 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. 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. 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. 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. 7 Prinzip von SQLJ Data.java Data.class Data.sqlj SQLJ Translator Java Compiler

  8. 8 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. 9 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.

  10. 10 10 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.

  11. 11 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 Sql- Anweisungn. OUT Ergebnis der Ausführung der Sql- Anweisung zurück zum Java-Programm. INOUT in beiden Richtungen gleichzeitig.

  12. 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. 13 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. 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); } iter.close();

  15. 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. 16 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.

  17. 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. 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. 19 Java-Complierung

  20. 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. 21 Gespeicherte Proz. mit Java

  22. 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. 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. 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. 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. 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. 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. 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.

More Related