WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von...

50
WS06/07 Prof. Dr. Andreas Schmietendorf 1 Programmierung von Client/Server-Anwendungen Verwendung von API‘s (JDBC)

Transcript of WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von...

Page 1: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 1

Programmierung von Client/Server-Anwendungen

Verwendung von API‘s (JDBC)

Page 2: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 2

Übersicht zur Vorlesung

Persistenzsicherung von Java-Objekten

Datenbankanbindung mit Hilfe von JDBC

Beispiel zur Verwendung des JDBC-Interfaces

Verwendung von Prepared Statements

Weiterführende Themenstellungen zum JDBC-Interface

Page 3: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 3

Möglichkeiten zur Persistenzsicherung von Java-Objekten

Page 4: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 4

Möglichkeiten zur Persistenzsicherung

Objektserialisierung – Objekt als Datenstrom wegschreiben

Manuelles OR-Mapping

- Verwendung des JDBC-Frameworks

- Embedded SQL (sehr verbreitet in C bzw. C++, bei Java aber keine Bedeutung)

Nutzung objektorientierter Datenbanksysteme

Verwendung des DAO-Entwurfsmusters (Datenabstraktion)

Einsatz von EJB‘s (Entity Beans)

OR-Mapping Tools (z.B. Hibernate)

Page 5: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 5

Möglichkeiten zur Persistenzsicherung

Client QueryEngine

RDBMSDB-Server

A: SQL-Kommando senden

C: Ergebnisse zurückgeben

Datenbank-Speicher

B: Kommando ausführen

Page 6: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 6

Möglichkeiten zur Persistenzsicherung

Client QueryEngine

RDBMSDB-Server

Java

Java

Datenbank-Speicher

Kommando ausführen

JDB

C

SQL

Relation

Page 7: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 7

Möglichkeiten zur Persistenzsicherung

Client QueryEngine

RDBMSDB-Server

Java

Objekte

Datenbank-Speicher

Kommando ausführen

OR

-Map

per JDBC,

SQL

Relation

Page 8: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 8

Möglichkeiten zur Persistenzsicherung

Hibernate-Anwendungen bestehen klassisch aus 4 Teilen:

1. Hibernate-Konfigurationsdatei (XML)

2. Pro persistenter Klasse eine Hibernate Mapping XML-Datei

3. Der Hibernate Java Library (JAR-Datei)

4. HQL (Hibernate Query Language) OO-Erweiterung zu SQL

sowie:

1. Den Java-Klassen

2. Der Datenbank mit dem Datenbank Schema

Page 9: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 9

Möglichkeiten zur Persistenzsicherung

OR-Mapping Tools: http://www.service-architecture.com/products/object-relational_mapping.html

Page 10: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 10

Datenbankanbindung mit Hilfe von JDBC

Page 11: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 11

Datenbankanbindung mit JDBC

JDBC - Java Database Connectivity API zur Programmierung von Datenbankverbindungen (Konzeptionell angelehnt an ODBC)

JDBC nutzt für den Datenbankzugriff das durch die X/Open standardisierte Call-Level-Interfaces (CLI)- Low level API, kein direktes objektorientiertes Mapping

- Implementierungen von Oracle, Sybase, Informix, DB/2, IMS,...

Aufgaben des JDBC-Interface- Verbindungsaufbau zur Datenbank

- SQL Kommandos (vgl. SELECT name FROM MITARBEITER)

- Ergebnisse verarbeiten und in der Oberfläche anzeigen

Page 12: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 12

Datenbankanbindung mit JDBC

Das JDBC-Interface bietet verschiedene Treibertypen (Typ 1 bis 4)

- Entscheidung über die Schichten der Applikation

- Vorteile einer mehrschichtigen C/S-Architektur berücksichtigen

Verwendbare Systeme (ohne Firewall):

- Web-Server: MS Internet Information Server

- JDBC-Applikations-Server (z.B. Weblogic „Tengah“

www.weblogic.com)

- MS SQL-Server

Page 13: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 13

Datenbankanbindung mit JDBC

Java-Applet

Web-Browser(z.B. Netscape)

DB-Server

JDBC-Server(z .B. IDS-Server)

Web-Server(z.B . M S IIS)

D atensätze

D B-Anfrage

H TTP-Anfrage

html-D ate ienclass-D ate ien

C lien t

S erv e r

Daten

Ethernet

Client Server

Page 14: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 14

Datenbankanbindung mit JDBC

Type 1 Treiber: JDBC-ODBC Bridge- keine Hardwareunabhängigkeit bei Applet-Anwendungen

- DB-Zugriffe erfolgen via dem ODBC-Treiber

- Zu fast jedem DB-System sind ODBC-Treiber verfügbar

Type 2 Treiber: Native partly Java Driver- Treiber des entsprechenden DBMS Herstellers werden benötigt

- Wandlung der JDBC-Aufrufe in herstellerspezifische Client-API für das jeweilige Datenbank-System

Merke: Treibertypen 1 und 2 sind für Applet-Anwendungen ungeeignet.

Page 15: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 15

Datenbankanbindung mit JDBC

Type 3 Treiber: Java Net all Java-Driver- Treiber nur zum Teil in Java geschrieben (eigentlich Proxy beim Client)- Middleware zwischen Java-Client und DB-Server notwendig- keine spezielle Software beim Client (Applets möglich) notwendig- mehrstufige C/S-Architekturen sind realisierbar (n-Tier)

Type 4 Treiber: - Treiber komplett in 100% Java geschrieben- Treiber wird bei Start des Browsers übertragen (rel. groß)- Mehrstufige C/S-Architekturen werden unterstützt

Schlußfolgerung: Treibertyp 4 ist für mehrstufige C/S-Architekturen die optimale Lösung (z.B. Einsatz im Kontext eines Web-Serves)

Page 16: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 16

Datenbankanbindung mit JDBC

SQL-2 Entry Level Standard von 1992

Problem der Portierung einer Anwendung auf ein anderes

Datenbanksystem (Problem der verschiedenen SQL-Dialekte)

Forderung von SUN an die JDBC-Hersteller zur Sicherung eines

minimalen Anspruches auf Standardisierung

SUN stellt eine entsprechende Test-Suite zum Nachweis der

Konformität von JDBC-Treibern bereit

Kritisch ist die Verwendung von Funktionen die über den o.g.

Standard hinausgehen

Page 17: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 17

Datenbankanbindung mit JDBC

Meistgenutzte Klassen des JDBC-API (import java.sql.*)

- java.sql.DriverManager

Verwalten der Datenbankverbindung

- java.sql.DriverConnection

Verbindungsaufbau zur Datenbank

- java.sql.Statement

beinhaltet den auszuführenden SQL-Befehl

wird als ASCI-Zeichenkette übergeben

- java.sql.ResultSet

Zugriff auf die Ergebnismenge des ausgeführten SQL-Befehls

Page 18: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 18

Datenbankanbindung mit JDBC

Öffnen einer Verbindung

Bevor auf die DB zugegriffen werden bedarf es einer Verbindung

Schritte beim Verbindungsaufbau

- Datenbanktreiber laden

- Initialisierung des Datenbanktreibers

- Erzeugen eines Verbindungsobjektes

Verbindungsobjekt

- Bleibt während der gesamten Verbindung bestehen

- Lieferant für spezielle Objekte zur Abfrage & Veränderung der DB

Page 19: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 19

Datenbankanbindung mit JDBC

Ausprägungen von getConnection (Verbindungsaufbau zur Datenbank)

static Connection getConnection(

string url

)

static Connection getConnection(

string url, String user, String password

)

static Connection getConnection(

string url, Properties info

)

Page 20: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 20

Datenbankanbindung mit JDBC

Aufbau des Connection-Strings:

Besteht aus mehreren Teilen

Durch Doppelpunkt voneinander getrennt

1. Teil: immer jdbc

2. Teil: Sub-Protokoll – Angabe des konkreten Treibers

Weitere Teile: Treiberspezifisch

Beispiele:

Firebird-DBcon = DriverManager.getConnection("jdbc:firebirdsql:localhost/3050:DirDB","sysdba","masterkey");

MySQL-DBcon = DriverManager.getConnection("jdbc:mysql://localhost/hs_mitarbeiter", "root", "");

Page 21: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 21

Datenbankanbindung mit JDBC

Erzeugen von Anweisungsobjekten

Abfragen und Änderungen erfolgen mittels Anweisungsobjekten

Implementieren das Interface Statement bzw. entspr. Subinterfaces

Einfachste Form „createStatement“ mit folgenden Methoden- executeQuery (String sql)

- executeUpdate (String sql)

Erzeugung unparametrisierter Abfragen und Änderungen der DB

Rückgabe:- Einfacher numerischer Ergebniswert (Erfolg bzw. Misserfolg)

- Menge von Datenbanksätzen, als Ergebnis der Abfrage

Page 22: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 22

Datenbankanbindung mit JDBC

Statement-Objekte:

Häufig kostenintensive Ressourcen

- Belegung von Speicherplatz

- Belegung von Rechenzeit

Erzeugung einer großen Anzahl sollte vermieden werden

Besserer Stil:

- Anlegen einer Reihe vordefinierter Statement-Objekte

- Mehrfache Verwendung von Statement-Objekten

- Allerdings besteht die Gefahr undefinierter Zustände

Page 23: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 23

Datenbankanbindung mit JDBC

Datenbankabfragen – Verwendung der executeQuery-Methode:

public ResultSet executeQuery (String sql)

throws SQLException

Die oben dargestellte Methode erwartet eine für die Datenbank

gültige SELECT-Anweisung (z.B. SELECT * FROM kunden

WHERE name = ‘Meier‘) und gibt einen ResultSet zurück. Das

ResultSet repräsentiert die Ergebnismenge.

Schrittweisen durchlaufen des ResultSet mittels der Methode next.

boolean next()

Page 24: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 24

Datenbankanbindung mit JDBC

Datenbankabfragen – Verwendung der executeQuery-Methode:

Zugriff auf die Spalten des durch next referenzierten Tupels- getXXX (int n), Übergabe eines numerischen Wertes

- getXXX (String x), Übergabe eines Spaltennamens

Ausgewählte Get-Methoden von ResultSet- getBoolean

- getByte

- getDate

- getString

- getInt

Page 25: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 25

Datenbankanbindung mit JDBC

Datenbankänderungen – Verwendung der executeUpdate-Methode:

public int executeUpdate (String sql)

throws SQLException

Die oben dargestellte Methode erwartet eine für die Datenbank gültige INSERT, UPDATE oder DELETE-Anweisung (z.B. INSERT INTO kunden VALUES (122, ‘Meier‘, ‘Andreas‘, 13509, ‘Berlin‘, ‘Wittestrasse 30H‘) bzw. eine DDL-Anweisung zum Ändern der Datenbankstruktur.

Diese Methode gibt keine Ergebnismenge zurück!

Bei Erfolg wird 1 zurückgegeben, andernfalls eines SQLException

Page 26: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 26

Datenbankanbindung mit JDBC

Klasse SQLException (Ausnahmebehandlung): Verbindungsaufbau zur Datenbank ist fehlgeschlagen Probleme mit SQL-Anweisungen

- Syntaxfehler- Semantische Fehler – z.B. falsche Typisierung

Behandlung einer SQLExceptioncatch (SQLException sqle)

while (sqle != null) {System.err.println(sqle.toString());System.err.println(“SQL-Status: “ + sqle.getSQLState());System.err.println(“ErrorCode: “ + sqle.getSQLState());

}}

Page 27: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 27

Beispiel für die Verwendung des JDBC-Interfaces

Page 28: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 28

JDBC-Beispiel

Benötigte Software bzw. Systeme: Laufende Firebird-Datenbank (z.B. mittels IBO-Console bearbeiten) http://sourceforge.net/projects/firebird “firebird-jca-jdbc-driver” firebirdsql-full.jar – enthält alle benötigten Klassen

- firebirdsql.jar - mini-concurrent.jar- jaas.jar (Innerhalb des JDK 1.4)- mini-j2ee.jar (JDBC classes)- log4j-core.jar (Logging-Funktionalitäten)

JDK 1.4.x - Setzen der Java-Umgebungsvariablen- Unter WinXP: Start – Einstellungen – Systemsteuerung – System - Erweitert- CLASSPATH .;C:\j2sdk1.4.2_08\lib\firebirdsql-full.jar - JAVA_HOME C:\j2sdk1.4.2_08

Page 29: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 29

JDBC-Beispiel

Firebank-Datenbank mittels DDL aufsetzen Java-Programm implementieren

- Treiber laden Class.forName("org.firebirdsql.jdbc.FBDriver");- Variable für Connection-Objekt: private Connection con; - Datenbankverbindung (Treiber:Server:Datenbank) herstellen mit:

DriverManager.getConnection("jdbc:firebirdsql:localhost/3050:C:/Programme/Firebird/examples/employee.gdb","sysdba","masterkey");- Treiber: jdbc:firebirdsql- Server: localhost/3050- Datenbank: C:/Programme/Firebird/examples/employee.gdb- Nutzername/Passwort: sysdba/masterkey

Page 30: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 30

JDBC-Beispiel

Page 31: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 31

JDBC-Beispiel

import java.sql.*;

public class JDBCTest {

// A. Schmietendorf – Fachhochschule für Wirtschaft Berlin – WS06/07 // JDBC-Testbeispiel im Rahmen der Vorlesung Programmierung C/S-Systeme private Connection con; private java.sql.Statement stm; public static void main(String argv[]) {

new JDBCTest().access(); }

Page 32: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 32

JDBC-Beispiel

public void access() {

try { Class.forName("org.firebirdsql.jdbc.FBDriver");} catch(ClassNotFoundException ex) { System.out.println("Class.forName : " + ex.getMessage());}

try {

con = DriverManager.getConnection("jdbc:firebirdsql:localhost/3050:C:/Programme/Firebird/examples/employee.gdb","sysdba","masterkey");

stm = con.createStatement(); stm.executeUpdate("INSERT INTO country VALUES ('Bulgaria','Leva')"); System.out.println("Daten erfolgreich in die Datenbank eingetragen");

Page 33: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 33

JDBC-Beispiel

System.out.println("Daten aus der Datenbanktabelle auslesen"); ResultSet rs = stm.executeQuery ("SELECT * FROM country"); while (rs.next ()) { String country = rs.getString (1); String currency = rs.getString (2); System.out.println(country + " " + currency); }

System.out.println("Ende der Datenausgabe - A. Schmietendorf"); // Ressourcenffreigabe rs.close();

con.close(); } catch (SQLException ex) { System.out.println(ex.getMessage()); }

} }

Page 34: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 34

JDBC-Beispiel

Verwendung eines ResultSet-Objektes zur Ergebnisverwaltung der Anfrage Navigation über die Ergebnismenge erfolgt nach dem Cursor-Prinzip Weitersetzen des Cursors mit der Methode next Zeilenauswahl entspricht der aktuellen Position des Cursors Spaltenauswahl der aktuellen Tupel mit getXXX-Methode und Spaltenindex

ResultSet rs = stm.executeQuery ("SELECT * FROM country"); while (rs.next ()) { String country = rs.getString (1); String currency = rs.getString (2); System.out.println(country + " " + currency); }

Page 35: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 35

JDBC-Beispiel

Page 36: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 36

Verwendung von Prepared Statements

Page 37: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 37

Prepared Statements

Prepared Statements sind parametrisierte SQL-Anweisungen

Werden deklariert und zum Vorkompilieren der DB übergeben

Können später beliebig of ausgeführt werden

Vorteile:

- Vorbereitungssarbeiten werden nur einmal erledigt

• Syntaxanalyse

• Vorbereitung der Abfragestrategie und -optimierung

- Bessere Performance

JDBC Prepared Statements im Interface PreparedStatement

Page 38: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 38

Prepared Statements

Methode preparedStatement:

PreparedStatement pst = con.preparedStatement (

“SELECT * FROM ?“

);

Parametrisierung von executeQuery bzw. executeUpdate

- Aufruf einer entsprechenden set-Methode je Fragezeichen

Ausführung mittels executeQuery bzw. executeUpdate

Page 39: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 39

Prepared Statements

Page 40: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 40

Prepared Statements

Page 41: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 41

Prepared Statements

public class DBClient {

public static void main(String[] args) throws Exception {DBConnect MyDBConnect = new DBConnect();// Suche ueber den NamenString res1 = MyDBConnect.searchForName("Mueller");System.out.print(res1);// Suche ueber die email-AdresseString res2 =

MyDBConnect.searchForEMail("[email protected]");System.out.print(res2);// Suche ueber die RaumnummerString res3 = MyDBConnect.searchForRaum("113");System.out.print(res3);

}}

Page 42: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 42

Prepared Statements

public class DBClient {

public static void main(String[] args) throws Exception {DBConnect MyDBConnect = new DBConnect();// Suche ueber den NamenString res1 = MyDBConnect.searchForName("Mueller");System.out.print(res1);// Suche ueber die email-AdresseString res2 =

MyDBConnect.searchForEMail("[email protected]");System.out.print(res2);// Suche ueber die RaumnummerString res3 = MyDBConnect.searchForRaum("113");System.out.print(res3);

}}

Page 43: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 43

Prepared Statements

Page 44: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 44

Prepared Statements

Page 45: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 45

Prepared Statements

Page 46: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 46

Prepared Statements

Page 47: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 47

Weiterführende Themenstellungen zum JDBC-Interface

Page 48: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 48

Transaktionssicherung

Steuerung des Transaktionsverhalten der Datenbank über 3 Methoden des Connection-Objektes

- void commit()

- void rollback()

- void setAutoCommit (boolean autoCommit)

Nach dem Aufbau einer JDBC-Verbindung- DB im Auto-Commit-Modus (Vorgabe JDBC)

- Jede einzelne Anweisung gilt als separate TA

Änderung mittes setAutoCommit (false)- TA müssen explizit durch Aufruf von commit bestätigt werden

- Mittels rollback kann eine TA zurückgesetzt werden

Page 49: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 49

Transaktionssicherung

Transaction Isolation Level (Beeinflussung des Sperrverhalten)

- Steuerung des Grades der Parallelität

- Hoher Transaction Level

desto weniger Konsistenzprobleme

geringerer Durchsatz, d.h. Performanceprobleme

- Niedriger Tranaction Level

ggf. potentielle Konsistenzprobleme

besseres Performanceverhalten

Page 50: WS06/07Prof. Dr. Andreas Schmietendorf1 Programmierung von Client/Server- Anwendungen Verwendung von API‘s (JDBC)

WS06/07 Prof. Dr. Andreas Schmietendorf 50

Transaktionssicherung

Verfügbare Transaction Isolation Level

- Connection.TRANSACTION_NONE

- Connection.TRANSACTION_READ_UNCOMMITTED

- Connection.TRANSACTION_READ_COMMITTED

- Connection.TRANSACTION_REPEATABLE_READ

- Connection.TRANSACTION_SERIALIZABLE

Lesen und Ändern des Transaction Isolation Level

- int getTransactionIsolation ( )

- void setTransactionIsolation ( )