• Java DataBase Connectivity • Standard zum Zugriff auf die

Werbung
JDBC
• Java DataBase Connectivity
• Standard zum Zugriff auf die Datenbank von Java
Anwendungen
• Vorgehensweise:
–
–
–
–
–
Erzeugen einer Verbindung zum DBMS
Erzeugen eines „Statements“ (DB-Befehl)
ggf. Parameterübergabe
Ausführen des Befehls
ggf. Auslesen des Ergebnisses
• Vorsicht: JDBC legt sich nicht auf SQL fest
Aufbau einer Verbindung
Connection conn = DriverManager.getConnection(
url_der_db, username, password)
• Treiber
wird vom DBMS mitgeliefert
•url_der_db: Identikator der Instanz
•Username, Passwort: klar
•Weitere Einstellungen: Transaktionslevel, Puffer,
etc. durch Programm oder Konfigurationsdatei
Lesen der Namen aller Profs
Statement s = conn.createStatement();
ResultSet r;
s.execute(„SELECT name FROM professoren“);
r = s.getResultSet();
while (r.next()) {
output(r.getString(1));
}
r.close();
Anfragen mit Parameter
PreparedStatement s = conn.prepareStatement(
„SELECT name FROM profs WHERE rang = ?);
ResultSet r;
...
s.setString(1, „C3“);
r = s.executeQuery();
while (r.next()) ...
Tipps und Tricks
Connection Pooling
• Erzeuge mehrere Verbindungen zum
Datenbanksystem
• Vor jedem Zugriff, belege eine freie Verbindung
• Führe Zugriff über diese Verbindung durch
• Vorteil: Eine langandauernde Datenbankoperation
blockiert nicht andere. Andere Operationen
können über andere Verbindungen laufen
• Typische Anzahl von Verbindungen: 5 – 10,
danach kontraproduktiv
Tipps und Tricks
Cursor Caching
• PreparedStatements für typische Operationen
• Beispiel:
insert into profs(name, rang) values(?,?)
• Belege ? mit Werten vor jeder Berufung
• Vorteil: Aufwand für Berufung wird reduziert
• Nachteil: Anfrageoptimierer hat keine
Statistiken für ?
Zusammenfassung
• Einfacher Mechanismus zum Senden von Befehlen
und Empfangen von Ergebnissen
• SQL Syntax wird nicht zur Übersetzungszeit
überprüft (!!!) Aus Sicht von Java sind Anfragen
einfach nur Strings
• Typsicherheit der Parameter wird auch erst zur
Laufzeit überprüft
• Alle JDBC Statements schmeißen SQLExceptions
• Neuere Standards: SQLJ – mehr Komfort und
mehr Sicherheit zur Übersetzungszeit
SQL J
•
•
•
•
Eingebettetes SQL in Java
Strenge Typisierung durch Präprozessor
Markierung von SQL Anweisungen durch #
Ähnliches Iterator (Cursor) Prinzip wie in JDBC
#sql iterator ProfIterator(String name, String rang);
ProfIterator myProfs;
#sql myProfs = { SELECT name, rang FROM Professoren };
while (myProfs.next()) {
System.out.println(myProfs.name() + myProfs.rang());
}
Herunterladen