Programmierung von Client/Server-Anwendungen Verwendung von API - PowerPoint PPT Presentation

1 / 50
About This Presentation
Title:

Programmierung von Client/Server-Anwendungen Verwendung von API

Description:

Programmierung von Client/Server-Anwendungen Verwendung von API s (JDBC) – PowerPoint PPT presentation

Number of Views:108
Avg rating:3.0/5.0
Slides: 51
Provided by: AndreasSchmietendor9
Category:

less

Transcript and Presenter's Notes

Title: Programmierung von Client/Server-Anwendungen Verwendung von API


1
Programmierung von Client/Server-AnwendungenVer
wendung von APIs (JDBC)
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

3
Möglichkeiten zur Persistenzsicherung von
Java-Objekten
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 EJBs (Entity Beans)
  • OR-Mapping Tools (z.B. Hibernate)

5
Möglichkeiten zur Persistenzsicherung
6
Möglichkeiten zur Persistenzsicherung
7
Möglichkeiten zur Persistenzsicherung
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

9
Möglichkeiten zur Persistenzsicherung
  • OR-Mapping Tools http//www.service-architecture.
    com/products/object-relational_mapping.html

10
Datenbankanbindung mit Hilfe von JDBC
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

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

13
Datenbankanbindung mit JDBC
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.

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)

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

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

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

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
  • )

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-DB
  • con DriverManager.getConnection("jdbcfirebirds
    qllocalhost/3050DirDB","sysdba","masterkey")
  • MySQL-DB
  • con DriverManager.getConnection("jdbcmysql//l
    ocalhost/hs_mitarbeiter", "root", "")

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

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

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()

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

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

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 SQLException
  • catch (SQLException sqle)
  • while (sqle ! null)
  • System.err.println(sqle.toString())
  • System.err.println(SQL-Status
    sqle.getSQLState())
  • System.err.println(ErrorCode
    sqle.getSQLState())

27
Beispiel für die Verwendung des JDBC-Interfaces
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-ful
    l.jar
  • JAVA_HOME ? C\j2sdk1.4.2_08

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 (TreiberServerDatenbank)
    herstellen mit
  • DriverManager.getConnection("jdbcfirebirdsqlloca
    lhost/3050C/Programme/Firebird/examples/employee
    .gdb","sysdba","masterkey")
  • Treiber jdbcfirebirdsql
  • Server localhost/3050
  • Datenbank C/Programme/Firebird/examples/employee
    .gdb
  • Nutzername/Passwort sysdba/masterkey

30
JDBC-Beispiel
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()

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("jdbcfirebir
    dsqllocalhost/3050C/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")

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())

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)

35
JDBC-Beispiel
36
Verwendung von Prepared Statements
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

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

39
Prepared Statements
40
Prepared Statements
41
Prepared Statements
  • public class DBClient
  • public static void main(String args) throws
    Exception
  • DBConnect MyDBConnect new DBConnect()
  • // Suche ueber den Namen
  • String res1 MyDBConnect.searchForName("Mueller
    ")
  • System.out.print(res1)
  • // Suche ueber die email-Adresse
  • String res2 MyDBConnect.searchForEMail("schmid
    t_at_gmx.de")
  • System.out.print(res2)
  • // Suche ueber die Raumnummer
  • String res3 MyDBConnect.searchForRaum("113")
  • System.out.print(res3)

42
Prepared Statements
  • public class DBClient
  • public static void main(String args) throws
    Exception
  • DBConnect MyDBConnect new DBConnect()
  • // Suche ueber den Namen
  • String res1 MyDBConnect.searchForName("Mueller
    ")
  • System.out.print(res1)
  • // Suche ueber die email-Adresse
  • String res2 MyDBConnect.searchForEMail("schmid
    t_at_gmx.de")
  • System.out.print(res2)
  • // Suche ueber die Raumnummer
  • String res3 MyDBConnect.searchForRaum("113")
  • System.out.print(res3)

43
Prepared Statements
44
Prepared Statements
45
Prepared Statements
46
Prepared Statements
47
Weiterführende Themenstellungen zum
JDBC-Interface
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

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

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 ( )
Write a Comment
User Comments (0)
About PowerShow.com