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 JavaCode: #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