SQLJ

Werbung
SQLJ
z
Standardisierte Java-DB-Schnittstelle
z
Spezifikationen
–
Part 0: Embedded SQL für Java (ANSI-Standard; Object Language Binding)
„ Statische Einbettung von SQL-Anweisungen in Java-Quelltext
–
Part 1: Java Stored Procedures (ANSI-Standard; seit September 1999)
„ Im DB-Server gespeicherte Java-Prozeduren & Java-Funktionen
–
Part 2: Java-Klassen für benutzerdefinierte SQL-Datentypen
„ Verwendung von Java-Klassen als SQL-Datentypen
z
Oracle, IBM, Informix, Sybase, Tandem, Sun, Microsoft stehen dahinter
z
SQLJ ist vollständig in den SQL-Standard übernommen worden
–
–
SQLJ Part 0 als SQL Part 10: Object Language Bindings (SQL/OLB)
SQLJ Part 1 und 2 als SQL Part 13: SQL Routines and Types Using the Java
Programming Language (SQL/JRT)
©Can Türker: SQL:1999 & SQL:2003 - Objektrelationale SQL, SQLJ & SQL/XML. dpunkt.verlag, 2003. ISBN: 3-89864-219-4.
206
Embedded SQL für Java- Überblick
z
z
Vorübersetzung des um SQLAnweisungen erweiterten JavaQuelltextes in „echten“ Java-Code
durch Translator sqlj
Java-Quelltext mit
eingebetteten SQL-Anweisungen
SQLJ-Translator
Überprüfung der SQLAnweisungen
–
–
–
SQLJProfil
korrekte Syntax
Übereinstimmung der
Anweisungen mit DB-Schema
Typkompatibilität der für den
Datenaustausch genutzten
Variablen
z
Customizing von Profilen
z
Nutzung von JDBC-Treibern
Java-Quelltext mit
JDBC-Aufrufen
Customizer
angepasstes
Profil
Syntax-Check
DB
Java-Compiler
Java
Byte-Code
SQLJLaufzeitsystem
JDBC
©Can Türker: SQL:1999 & SQL:2003 - Objektrelationale SQL, SQLJ & SQL/XML. dpunkt.verlag, 2003. ISBN: 3-89864-219-4.
207
Architektur von SQLJ Part 0
// Datei: Kunden.sqlj (Implementierung eines SQLJProgramms)
Vorübersetzen des SQLJ-Programms
> sqlj Routines.sqlj
import java.sql.*;
import sqlj.runtime.*;
Kunden.java
#sql iterator KundenIter(int KNr, String Name);
public class Kunden
{
public static void main(String argv[])
{
... // lade passenden Treiber und stelle DB-Verbindung her
Übersetzen des Java-Programms
> javac Kunden.java
Kunden.class
KundenIter kunde;
#sql kunde = { SELECT KNr, Name FROM Kunde };
Starten des Java-Programms
> java Kunden
while (kunde.next())
System.out.println(kunde.KNr() + ", " + kunde.Name());
kunde.close();
}
Tabelle
Kunde
}
©Can Türker: SQL:1999 & SQL:2003 - Objektrelationale SQL, SQLJ & SQL/XML. dpunkt.verlag, 2003. ISBN: 3-89864-219-4.
208
SQLJ-Anweisungen
z
SQL-Anweisungen
–
–
–
–
z
QL-, DML- und DDL-Anweisungen
Prozeduraufrufe
Funktionsaufrufe
Aufruf unbenannter SQL-Blöcke
#sql { Anweisung };
#sql { CALL Prozedur(Param) };
#sql r = { VALUES(Funktion(Param)) };
#sql { BEGIN ... END };
Klassendefinitionen für
–
–
Iteratoren
Kontexte
#sql iterator IteratorKlasse(Typdefinitionsliste);
#sql context MyContext;
©Can Türker: SQL:1999 & SQL:2003 - Objektrelationale SQL, SQLJ & SQL/XML. dpunkt.verlag, 2003. ISBN: 3-89864-219-4.
209
Host-Variablen
z
Variablen einer Host-Sprache (hier Java), die in SQL-Anweisungen
auftreten können
z
Verwendung: Austausch von Daten zwischen Host-Sprache und SQL
z
Zugriff auf Host-Variablen in SQLJ-Anweisungen mittels
Doppelpunktnotation :variable
z
Beispiel:
String kname;
#sql { SELECT Name INTO :kname FROM Kunde WHERE KNr = 2322 };
©Can Türker: SQL:1999 & SQL:2003 - Objektrelationale SQL, SQLJ & SQL/XML. dpunkt.verlag, 2003. ISBN: 3-89864-219-4.
210
Iteratoren
z
Java-Objekte, die das Cursor-Konzept implementieren
z
Formen:
–
Benannte Iteratoren
#sql iterator KundeIter(int KNr, String Name);
„
„
–
Spaltenzugriff über Accessor-Methode mit dem Spaltennamen
Iteration mittels Methode next()
Positionsiteratoren
#sql iterator KundePosIter(String);
„
„
Spaltenzugriff über Position in der Anweisung
Iteration mittels FETCH...INTO-Anweisung
©Can Türker: SQL:1999 & SQL:2003 - Objektrelationale SQL, SQLJ & SQL/XML. dpunkt.verlag, 2003. ISBN: 3-89864-219-4.
211
Benannte Iteratoren - Beispiel
// Deklaration eines benannten Iterators
#sql iterator KundeIter(int KNr, String Name);
// Definition eines Iteratorobjekts
KundeIter kunden;
// Ausführung einer SQL-Anweisung; Population des Iterators
#sql kunden = { SELECT KNr, Name FROM Kunde WHERE Name LIKE 'C%' };
// Iteration durch die Ergebnismenge; Spaltenzugriff mittels Accessor-Methoden
while (kunden.next()) {
System.out.println(kunden.KNr() + " " + kunden.Name();
}
// Iterator schliessen
kunden.close();
©Can Türker: SQL:1999 & SQL:2003 - Objektrelationale SQL, SQLJ & SQL/XML. dpunkt.verlag, 2003. ISBN: 3-89864-219-4.
212
Positionsiteratoren - Beispiel
// Deklaration eines Positionsiterators sowie einer Variablen
#sql iterator KundePosIter(String);
String kundenname;
// Definition eines Iteratorobjekts
KundePosIter kunden;
// Ausführung einer SQL-Anweisung; Population des Iterators
#sql kunden = { SELECT Name FROM Kunde WHERE Name LIKE 'C%' };
// Iteration durch die Ergebnismenge
while (true) {
#sql { FETCH :kunden INTO :kundenname };
if (kunden.endFetch()) break;
System.out.println(kundenname);
}
// Hole nächsten Datensatz
// Iterator am Ende?
// Iterator schliessen
kunden.close();
©Can Türker: SQL:1999 & SQL:2003 - Objektrelationale SQL, SQLJ & SQL/XML. dpunkt.verlag, 2003. ISBN: 3-89864-219-4.
213
Verbindungskontext
z
Jede SQL-Anweisung wird mit einem Verbindungskontext assoziiert
–
Verbindung zur einer bestimmten DB mittels expliziten Verbindungskontext
#sql context KundeKontext;
String url = "jdbc:subprotocol:datasource";
String user = "scott";
String passwd = "tiger";
KundeKontext ctx = new KundeKontext(url, user, passwd, false)
–
Ausführung einer SQL-Anweisung in einem explizitem Verbindungskontext
#sql [ctx] { SQL-Anweisung };
–
Defaultkontext
ConnectionContext.getDefaultContext()
©Can Türker: SQL:1999 & SQL:2003 - Objektrelationale SQL, SQLJ & SQL/XML. dpunkt.verlag, 2003. ISBN: 3-89864-219-4.
214
Ausführungskontext
z
Jede SQL-Anweisung wird in einem Ausführungskontext ausgeführt
–
Definition eines expliziten Ausfürhtungskontextes
ExecutionContext execCtx = new ExecutionContext()
–
Ausführung einer SQL-Anweisung in einem explizitem Verbindungskontext
#sql [execCtx] { SQL-Anweisung };
–
Defaultkontext
ConnectionContext.getExecutionContext()
©Can Türker: SQL:1999 & SQL:2003 - Objektrelationale SQL, SQLJ & SQL/XML. dpunkt.verlag, 2003. ISBN: 3-89864-219-4.
215
Verbindungsaufbau in Oracle
z
Oracle stellt Connect-Methode bereit, die eine DB-Verbindung und einen
Default-Kontext aufbaut
–
Entspricht etwa
Connection con = DriverManager.getConnection(url, user, passwd);
DefaultContext ctx = new DefaultContext(con);
DefaultContext.setDefaultContext(ctx);
–
Aufruf der Connect-Methode
oracle.connect(url, user, passwd);
–
Alternativer Aufruf (Verbindungsparameter in connection.properties definiert)
oracle.connect(JavaKlasse.class, "connection.properties");
©Can Türker: SQL:1999 & SQL:2003 - Objektrelationale SQL, SQLJ & SQL/XML. dpunkt.verlag, 2003. ISBN: 3-89864-219-4.
216
Herunterladen