SQLJ Basics Universität Stuttgart Abteilung Anwendersoftware 01.07.2002 Was ist SQLJ? SQLJ Part 0: - Steht für Embedded SQL in Java SQLJ Part 1: - Java-Methoden als SQL Stored-Procedures SQLJ Part 2: - Java Klassen als echte SQL-Datentypen Universität Stuttgart Abteilung Anwendersoftware Marcel Keller 4/38 1
Was ist SQLJ? (2) Entstanden durch den Zusammenschluss führender Datenbankhersteller wie: Oracle, Sybase, SUN, IBM, Informix, Micro Focus, Microsoft, XDB, Cloudscape und Compaq/Tandem, sowie JavaSoft. Universität Stuttgart Abteilung Anwendersoftware Marcel Keller 5/38 Grundlagen Entspricht Richtlinien des ANSI/ISO Embedded SQL Standard Aufbau eines SQLJ-Statement im Java- Code: #sql {SELECT * FROM bsp_tabelle}; Source-Datei hat die Endung *.sqlj Universität Stuttgart Abteilung Anwendersoftware Marcel Keller 7/38 2
Abgrenzung zu JDBC // SQLJ int n; #sql { INSERT INTO Gehalt VALUES (:n)}; // JDBC int n; Statement stmt = conn.preparestatement( INSERT INTO Gehalt VALUES (?) ); stmt.setint(1,n); stmt.execute(); stmt.close(); Universität Stuttgart Abteilung Anwendersoftware Marcel Keller 8/38 SQLJ Pre-Compiler Übersetzungsvorgang des Pre-Compiler: Universität Stuttgart Abteilung Anwendersoftware Marcel Keller 9/38 3
Datentypen Abbildung der Datentypen: Universität Stuttgart Abteilung Anwendersoftware Marcel Keller 10/38 Host-Variablen und Host-Ausdrücke Variablen oder beliebige Java Ausdrücke Voraussetzung Datentypen sind äquivalent Syntax: - :variable1 oder - :(variable1 + variable2) Richtungen der Datenüberübertragung -IN - OUT und -INOUT Universität Stuttgart Abteilung Anwendersoftware Marcel Keller 11/38 4
Iteratoren Host-Variablen erlauben nur Austausch von einfachen Datenelementen. Für Ergebnismengen benötigt man Iteratoren Es wird unterschieden zwischen - Benannten Iteratoren und - Positions-Iteratoren Universität Stuttgart Abteilung Anwendersoftware Marcel Keller 12/38 Benannte Iteratoren Name einer Spalte wird Attributname in SQL-Statement zugeordnet Namen müssen identisch sein, sonst ist keine Zuordnung möglich Universität Stuttgart Abteilung Anwendersoftware Marcel Keller 13/38 5
Beispiel: Benannte Iteratoren #sql public iterator Person_Iterator(int pid, String name, String forename); public void showallstoredpersons() { Person_Iterator listofpersons; #sql listofpersons = { SELECT pid, name, forename FROM person }; while (listofpersons.next()) { System.out.println("("+listOfPersons.pid()+", "+listofpersons.name()+", "+listofpersons.forename()+")"); } listofpersons.close(); } Universität Stuttgart Abteilung Anwendersoftware Marcel Keller 14/38 Positions-Iteratoren Definition legt nur Datentypen fest, nicht die Namen Reihenfolge der Datentypen muss mit der Spaltenreihenfolge in der SQL-Anfrage übereinstimmen Universität Stuttgart Abteilung Anwendersoftware Marcel Keller 15/38 6
Beispiel: Positions-Iteratoren #sql public iterator listofperson(int, String, String); public void showallstoredpersons() { Person listofpersons; int pid; String surname; String forename; #sql listofpersons = { SELECT pid, surname, forename FROM person }; while (!listofpersons.endfetch()) { #sql { FETCH :listofpersons INTO :pid, :surname, :forename }; System.out.println("("+pid+", "+surname+", "+forename+")"); } listofpersons.close(); } Universität Stuttgart Abteilung Anwendersoftware Marcel Keller 16/38 Verbindungskontext Wie wird zugegriffen Auf welche Datenbank wird verbunden Identisch zu JDBC Für jedes SQLJ-Statement kann ein eigener Verbindungskontext erstellt werden Wenn nichts explizit angegeben ist wird die Default-Verbindung verwendet Universität Stuttgart Abteilung Anwendersoftware Marcel Keller 17/38 7
Ausführungskontext Zu jedem Verbindungskontext gehört mindestens ein Ausführungskontext Der Ausführungskontext ermöglicht die Abfrage von: - Warnungen -Fehler - Statusmeldungen Universität Stuttgart Abteilung Anwendersoftware Marcel Keller 18/38 Multithreading Zwei Möglichkeiten: - Für jeden Thread wird ein eigener Verbindungskontext erstellt. - Für jeden Thread wird ein eigener Ausführungskontext erstellt. Universität Stuttgart Abteilung Anwendersoftware Marcel Keller 19/38 8
Aufruf von Stored-Procedures Stored-Procedures laufen lokal auf einem Datenbanksystem Sie werden mit dem Befehl CALL aufgerufen. Beispiel: #sql {CALL bsp_prozedur (:variable1)}; Universität Stuttgart Abteilung Anwendersoftware Marcel Keller 20/38 Aufruf von Stored-Procedures (2) Zuweisung eines Rückgabewertes mit dem Befehl VALUES. Beispiel: int x; #sql x = {VALUES (bsp_funktion(2002))}; Universität Stuttgart Abteilung Anwendersoftware Marcel Keller 21/38 9
Transaktionsverwaltung Es wird unterschieden zwischen manueller und automatischer Transaktionsverwaltung. Wird über den Parameter AutoCommit im Verbindungskontext definiert. Universität Stuttgart Abteilung Anwendersoftware Marcel Keller 22/38 SQLJ - JDBC Vorteile SQLJ: - Übersichtlicher Code - Fehler wird nicht erst zur Laufzeit gefunden Nachteile SQLJ: - Grosse Laufzeitbibliothek (ca. 200-500 KByte) - Nur statische SQL-Statements Universität Stuttgart Abteilung Anwendersoftware Marcel Keller 36/38 10
Fazit Mit SQLJ werden die Nachteile von JDBC entschärft SQLJ aber keinesfalls vollständiger Ersatz für JDBC, sondern Ergänzung Universität Stuttgart Abteilung Anwendersoftware Marcel Keller 37/38 Ausblick SQLJ verbessert die Datenbankanbindung mit Java und schafft daher eine gute Grundlage für viele Business Applikationen, die heute und in der Zukunft eine signifikante Rolle im IT-Markt ausmachen. Universität Stuttgart Abteilung Anwendersoftware Marcel Keller 38/38 11