sql - fbi.h

Werbung
Kapitel 10
JDBC und SQLJ
Prof. Dr. Wolfgang Weber
Vorlesung Datenbanken
1
JDBC und SQLJ
•
Bisher: Einbettung von SQL (statisch bzw. dynamisch) in C, C++,
COBOL, ADA … (embedded SQL)
bzw. prozedurale Erweiterungen für SQL in Oracle (PL/SQL)
•
Was ist mit Zugriff auf SQL-Datenbanken aus Java?
•
JDBC
–
–
–
•
1996: JDBC-Spezifikation von Sun vorgestellt
Java-API für Zugriff auf SQL-Datenbanken
Unterstützt dynamisches SQL -> keine Typprüfung während Übersetzung
SQLJ (vgl. embedded SQL)
–
–
–
–
1997 vorgeschlagen von IBM, Oracle, Sybase, Informix und Sun
Seit Ende 1998 ANSI-Standard
Unterstützt statisches SQL -> Typprüfung während Übersetzung
in bestimmten Umfang: auch dynamische SQL-Anweisungen
Prof. Dr. Wolfgang Weber
Vorlesung Datenbanken
2
JDBC – Architektur
Architektur – siehe Tafel
Java Klassen und Interfaces im Paket java.sql
• java.sql.DriverManager
Laden der Treiber und Aufbau der Verbindung zur Datenbank
• java.sql.Connection
ein Connection-Objekt repräsentiert eine Datenbankverbindung
• java.sql.Statement
Objekt für die Ausführung von SQL-Anweisungen
• java.sql.ResultSet
Objekt für die Repräsentation der Ergebnis-Relation der Abfrage
Prof. Dr. Wolfgang Weber
Vorlesung Datenbanken
3
JDBC – Anfrageausführung
// Aufbau der Verbindung
Connection con = DriverManager.getConnection(url, benutzer, passwort);
// Aufbau und Ausführung der Anfrage
String retQuery = “select Prod-Nr, Produktart from Toepferprodukt“;
Statement stmt = con.createStatement ();
ResultSet rs = stmt.executeQuery ( retQuery );
Für Retrieval-Operationen (select):
stmt.executeQuery
Für Einfüge- (insert), Update- (update), Lösch- (delete) und DDL-Operationen
(create table, drop table):
stmt.executeUpdate
...
String insQuery = “insert into Toepferprodukt values (50071, ‘Vase‘)“;
Statement stmt = con.createStatement ();
int numberRows = stmt.executeUpdate ( insQuery );
Prof. Dr. Wolfgang Weber
Vorlesung Datenbanken
4
JDBC – Auswertung des
Anfrageergebnis
Auswertung des Result-Set:
• Navigation auf der Ergebnismenge mit Referenz (~Cursor in PL/SQL)
• Zugriff auf Spalten des ResultSet mit get<type> -Methoden
...
String retQuery = “select Prod-Nr, Produktart from Toepferprodukt“;
Statement stmt = con.createStatement ();
ResultSet rs = stmt.executeQuery ( retQuery ); //entspricht
//declare cursor c is select … ; in PL/SQL
System.out.println(“Produkt-Nr Produktart“);
Cursor rs steht am Anfang
try {
VOR dem ersten Tupel,
while (rs.next ())
nach rs.next auf 1. Tupel
{
int i = rs.getInt(1);
Spalten sind von 1
String s = rs.getString(2);
bis n nummeriert
System.out.println (i + “ “ + s);
}
}
catch (SQLException exc) {
// Fehlerbehandlung
System.out.println(“SQL-Fehler: “ + exc);
}
Prof. Dr. Wolfgang Weber
Vorlesung Datenbanken
5
JDBC – Anfragen mit Parameter
Statt Statement wird das Objekt PreparedStatement der Klasse Connection
verwendet, wenn Parameter erst zur Laufzeit ermittelt werden können:
String insQuery = “insert into Toepferprodukt values (?, ?)“;
PreparedStatement stmt = con.prepareStatement (insQuery);
// Setzen der Werte
stmt.setInt ( 1, 50071)
stmt.setString ( 2, “Vase“);
int numberRows = stmt.executeUpdate ( insQuery );
• Weitere Möglichkeiten in JDBC
– CallableStatement für den Aufruf von Stored Procedures
– Pooling von Connection-Objekten, verteilte Transaktionen,
verbessertes Cursor-Scrolling etc. in JDBC 2
– Weitere Datentypen, Unterstützung von Savepoints in
Transaktionen etc. in JDBC 3
– …
Prof. Dr. Wolfgang Weber
Vorlesung Datenbanken
6
SQLJ
•
•
•
Direkte Einbettung von SQL-Anweisungen in Java Code
SQLJ-Anweisungen werden mittels Pre-Compiler in Java-Code
übersetzt
Vgl. embedded SQL
• Eingebetete SQL-Anweisungen werden durch #sql gekennzeichnet:
#sql { <SQL-Anweisungen> }
• Ergebnistupel können mit einem Iterator durchlaufen werden
(Iterator entspricht Cursor in PL/SQL)
• Host-Variablen werden durch Doppelpunkt (:name) gekennzeichnet
...
try{
#sql iterator PrdItr (int ProdNr, String ProdArt);
#sql PrdItr = { select Prod-Nr, Produktart from Toepferprodukt };
while (PrdItr.next ())
{ System.out.println(PrdItr.ProdNr()+“ “+PrdItr.ProdArt())} ...
} ...
Prof. Dr. Wolfgang Weber
Vorlesung Datenbanken
7
Herunterladen