22.07.2013 Aufrufe

Informatik II – Vorlesungstag 11

Informatik II – Vorlesungstag 11

Informatik II – Vorlesungstag 11

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>Informatik</strong> <strong>II</strong> <strong>–</strong> <strong>Vorlesungstag</strong> <strong>11</strong><br />

Dr. Christian Kuhlmann<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite 1


Agenda<br />

Wiederholung<br />

Kommunikation mit Java<br />

- RMI<br />

Datenbankanwendungen mit Java<br />

Klausurtraining<br />

- Aufgabe 4<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite 2


Kommunikation mit Java<br />

Hoher Grad der Systemvernetzung impliziert großen Bedarf an Kommunikation zwischen<br />

Anwendungen<br />

Kommunikation wird durch Protokolle und Datenaustauschformate sichergestellt, die von den<br />

beteiligten Systemen verstanden und akzeptiert werden<br />

Beispiele von Protokollen/Diensten auf der Anwendungsebene<br />

- HTTP (Hypertext Transport Protocol) Übertragung von Webseiten<br />

- FTP (File Transport Protocol) Übertragung von Dateien<br />

- SMTP (Simple Mail Transfer Protocol) Übertragung von Emails<br />

- CORBA/<strong>II</strong>OP (Common Object Request<br />

Broker Architecture) Definition plattformübergreifende Protokolle und Dienste<br />

- RMI (JRMP) (Remote Methode Invocation) Kommunikation verteilter Java-Anwendungen (Aufruf von<br />

Methoden von Objekten, die auf einem entfernten System<br />

existieren)<br />

- ...<br />

Beispiele von Datenaustauschformaten<br />

- Text Austausch (unstrukturierter Texte)<br />

- CSV (Comma Separated Values) Austausch einfach strukturierter (mit Komma<br />

separierter) Texte<br />

- EDIFACT (United Nations Electronic<br />

Data Interchange For Administration,<br />

Commerce and Transport) branchenübergreifender internationaler Standard für das<br />

Format elektronischer Daten im Geschäftsverkehr<br />

- XML (Extensible Markup Language) Darstellung hierarchisch strukturierter Daten (sehr flexible<br />

und populäre Art des Datenaustausches)<br />

- ...<br />

Wiederholung<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite 3


Wie werden Daten transportiert?<br />

Protokoll-Ebenen<br />

Anwendungsebene<br />

Transportebene<br />

SOAP<br />

Wiederholung<br />

HTTP FTP SMTP <strong>II</strong>OP RMP<br />

TCP/IP<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite 4


XML<br />

Aufbau von XML<br />

- Tags:<br />

Christian<br />

- Variablen:<br />

<br />

- Verarbeitungsanweisungen:<br />

<br />

- Kopfdefinition (als spezielle Verarbeitungsanweisung):<br />

<br />

- Kommentare:<br />

<br />

- Sonderzeichen:<br />

Wiederholung<br />

< > & " ‘ (werden durch &lt, &gt, &amp, &aquot, &apos<br />

im text dargestellt)<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite 5


XML<br />

Beispiel<br />

<br />

<br />

<br />

Opel<br />

Opel<br />

Corsa<br />

Corsa<br />

<br />

<br />

20070406<br />

20070406<br />

26000<br />

26000<br />

Alles<br />

Alles<br />

in<br />

in<br />

Ordnung<br />

Ordnung<br />

<br />

<br />

<br />

<br />

20080506<br />

20080506<br />

74000<br />

74000<br />

Zahnriemen<br />

Zahnriemen<br />

erneuert<br />

erneuert<br />

<br />

<br />

<br />

<br />

XML gibt die Struktur/Notation/Syntax vor<br />

Wiederholung<br />

Die Semantik (Bedeutung der Tags) muss individuell festgelegt werden (Absprache<br />

der Kommunikationsparteien)<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite 6


Kommunikation<br />

Kommunikation auf Transportschichtebene (TCP/IP) via Sockets:<br />

datenstrombasierte Programmierschnittstelle zur Kommunikation<br />

zweier Rechner in einem TCP/IP-Netz<br />

- Server<br />

- Client<br />

ServerSocket erzeugen, um den Port „abzuhören“<br />

Socket erzeugen mit Adresse und Port des Servers<br />

- Server<br />

Socket zu einer Anfrage eines Clients erzeugen<br />

- Client/Server<br />

Senden/Empfangen von Daten<br />

Wiederholung<br />

Verbindung trennen, Socket schließen<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite 7


Kommunikation<br />

Kommunikation<br />

- via HTTP: Übertragung von Daten, Überwiegend von Webseiten,<br />

um sie in einen Web-Browser zu laden<br />

- via FTP: Mit diesem Protokoll lassen sich Dateien von einem<br />

System zum anderen übertragen<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite 8


Agenda<br />

Wiederholung<br />

Kommunikation mit Java<br />

- RMI<br />

Datenbankanwendungen mit Java<br />

Klausurtraining<br />

- Aufgabe 4<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite 9


Remote Method Invocation (RMI)<br />

Ziel: Programmcode verteilen und von unterschiedlichen<br />

Anwendungsteilen im Netz aufrufen<br />

Vorteil: Delegation von Aufgaben an geeignete Server und somit<br />

eine gleichmäßigere Verteilung und höhere Skalierbarkeit von<br />

Anwendungen<br />

Grundsätzliche Arbeitsweise<br />

Kommunikation mit Java<br />

- Definition von extern aufrufbaren Diensten als Methoden in Remote-<br />

Interfaces<br />

- Implementierung des Interfaces durch eine Serverklasse<br />

- Erzeugung von Objekten der Serverklasse ( Remote-Objekte)<br />

- Registrierung der Remote-Objekte bei einem Namens-Service (RMI-<br />

Registry), der von potentiellen Nutzern (Clients) abgefragt werden kann<br />

- Clients rufen virtuell die gewünschten Methoden auf (über den Name-<br />

Service erhalten sie den Zugriff auf das gewünschte Remote-Objekt)<br />

- Rückübermittlung der Rückgabewerte an den Client<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite 10


Remote Method Invocation (RMI)<br />

CLIENT<br />

RMI-Registry<br />

Suche Registrierung<br />

virtueller<br />

Aufruf<br />

Remote-Objekte<br />

Kommunikation mit Java<br />

SERVER<br />

Quelle: Krüger, Handbuch der Java-Programmierung, 5. Auflage, Addison Wesley, Version 5.0.1<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite <strong>11</strong>


Remote Method Invocation (RMI)<br />

Lookup:<br />

TimeService ts =<br />

(TimeService)Naming.<br />

lookup(url);<br />

extends Remote<br />

<br />

TimeService<br />

Methode: getTime();<br />

TimeServiceImpl_Stub<br />

Erstellen eines Dienstes TimeService<br />

Dienst: RMI-Registry<br />

host: rmiReg, port: 1099<br />

tsi<br />

(Objekt vom Typ<br />

TimeServiceImpl)<br />

CLIENT SERVER<br />

„Stellvertreterobjekt“<br />

ts<br />

(Objekt vom Typ<br />

TimeServiceImpl_Stub)<br />

Stub-Skeleton<br />

Verbindung<br />

Registrierung:<br />

Naming.rebind("TimeService", tsi);<br />

Objekt vom Typ<br />

TimeServiceImpl_Skel<br />

TimeServiceImpl<br />

extends<br />

UnicastRemoteObject<br />

Impl. Methode: getTime()<br />

generiert<br />

(über rmic)<br />

TimeServiceImpl_Skel<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite 12


Remote Method Invocation (RMI)<br />

Client<br />

Stub<br />

Remote<br />

Reference<br />

Layer<br />

Virtuelle Kommunikation<br />

Netzwerkverbindung<br />

Kommunikation mit Java<br />

Server<br />

Skeleton<br />

Remote<br />

Reference<br />

Layer<br />

Quelle: Krüger, Handbuch der Java-Programmierung, 5. Auflage, Addison Wesley, Version 5.0.1<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite 13


Remote Method Invocation (RMI)<br />

Implementierung<br />

Verwendete Packages<br />

import<br />

import<br />

java.rmi.*;<br />

java.rmi.*;<br />

import<br />

import<br />

java.rmi.server.*;<br />

java.rmi.server.*;<br />

Schritt 1: Definition des Remote-Interfaces<br />

public<br />

public<br />

interface<br />

interface<br />

TimeService<br />

TimeService<br />

extends<br />

extends<br />

Remote<br />

Remote<br />

{<br />

{<br />

<br />

<br />

}<br />

}<br />

Kommunikation mit Java<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite 14


Schritt 2: Implementierung des Remote-Interfaces anschl. Erzeugen von Stub und Skeleton<br />

public<br />

public<br />

class<br />

class<br />

TimeServiceImpl<br />

TimeServiceImpl<br />

extends<br />

extends<br />

UnicastRemoteObject<br />

UnicastRemoteObject<br />

implements<br />

implements<br />

TimeService<br />

TimeService<br />

Schritt 3: Erzeugung und Registrierung des Remote-Objektes Dienst RMI-Registry muss laufen!<br />

System.setSecurityManager(new<br />

System.setSecurityManager(new<br />

RMISecurityManager());<br />

RMISecurityManager());<br />

TimeServiceImpl<br />

TimeServiceImpl<br />

tsi<br />

tsi<br />

=<br />

=<br />

new<br />

new<br />

TimeServiceImpl();<br />

TimeServiceImpl();<br />

Naming.rebind("TimeService",<br />

Naming.rebind("TimeService",<br />

tsi);<br />

tsi);<br />

Schritt 4: Zugriff auf das Remote-Objekt<br />

Kommunikation mit Java<br />

String<br />

String<br />

host<br />

host<br />

=<br />

=<br />

"ph01";<br />

"ph01";<br />

String<br />

String<br />

port<br />

port<br />

=<br />

=<br />

"1099";<br />

"1099";<br />

String<br />

String<br />

srv<br />

srv<br />

=<br />

=<br />

"TimeService";<br />

"TimeService";<br />

String<br />

String<br />

url<br />

url<br />

=<br />

=<br />

"rmi://"<br />

"rmi://"<br />

+<br />

+<br />

host<br />

host<br />

+<br />

+<br />

":"<br />

":"<br />

+<br />

+<br />

port<br />

port<br />

+<br />

+<br />

"/"<br />

"/"<br />

+<br />

+<br />

srv;<br />

srv;<br />

TimeService<br />

TimeService<br />

ts<br />

ts<br />

=<br />

=<br />

(TimeService)Naming.lookup(url);<br />

(TimeService)Naming.lookup(url);<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite 15


Agenda<br />

Wiederholung<br />

Kommunikation mit Java<br />

- RMI<br />

Datenbankanwendungen mit Java<br />

Klausurtraining<br />

- Aufgabe 4<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite 16


Datenbankanwendungen mit Java<br />

Datenbanken (DB bzw. DB-Systeme) sind dafür da,<br />

- Daten elektronisch auf effiziente Art dauerhaft und zuverlässig<br />

zu speichern<br />

- die Daten den Benutzen bzw. Anwendungssystemen nach<br />

Bedarf effizient bereitzustellen<br />

Eigentliche Datenbank<br />

(Einheit zur Speicherung<br />

der Daten und deren<br />

Beschreibung (Datenkatalog))<br />

DBMS<br />

(Datenbankmanagementsystem)<br />

Datenbanksystem<br />

DB<br />

Verwaltungskomponente,<br />

stellt Schnittstelle bereit.<br />

Das ist i.A. eine Sprache<br />

zur Behandlung von Daten, d.h.<br />

lesen, schreiben, ändern,<br />

löschen.<br />

organisiert intern die strukturierte<br />

Speicherung<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite 17


Relationale DB-Systeme<br />

Relationale Datenbanken<br />

- Speicherung der Daten erfolgt mittels Relationen, d.h. Tabellen, in<br />

denen Datensätze in Form von Tabelleneinträgen (Zeilen) mit ein oder<br />

mehr Attributen (Spalten) vorgehalten werden<br />

- Als Schnittstelle bzw. Datenselektionssprache wird SQL verwendet<br />

Auto<br />

Auto<br />

Schlues<br />

sel<br />

47<strong>11</strong><br />

2873<br />

9872<br />

Herstell<br />

er<br />

Opel<br />

Volvo<br />

BMW<br />

Typ<br />

Corsa<br />

V50<br />

314<br />

Datenbankanwendungen mit Java<br />

Person Adresse<br />

Baujahr<br />

1999<br />

2005<br />

1996<br />

Kmstand<br />

54.000<br />

123.000<br />

210.000<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite 18


Relationale DB-Systeme<br />

Lesen<br />

SELECT<br />

SELECT<br />

[ALL|DISTINCT]<br />

[ALL|DISTINCT]<br />

ColList<br />

ColList<br />

FROM<br />

FROM<br />

TabName<br />

TabName<br />

[,TabName]...<br />

[,TabName]...<br />

[WHERE SearchCond]<br />

[WHERE SearchCond]<br />

[GROUP<br />

[GROUP<br />

BY<br />

BY<br />

ColName<br />

ColName<br />

[,ColName]...]<br />

[,ColName]...]<br />

[HAVING<br />

[HAVING<br />

SearchCond]<br />

SearchCond]<br />

[UNION SubQuery]<br />

[UNION SubQuery]<br />

[ORDER<br />

[ORDER<br />

BY<br />

BY<br />

ColName<br />

ColName<br />

[ASC|DESC]<br />

[ASC|DESC]<br />

[,ColName<br />

[,ColName<br />

[ASC|DESC]]...]<br />

[ASC|DESC]]...]<br />

Einfügen, Ändern, Löschen<br />

INSERT<br />

INSERT<br />

INTO<br />

INTO<br />

TabName<br />

TabName<br />

[( ColName [,ColName] )]<br />

[( ColName [,ColName] )]<br />

VALUES<br />

VALUES<br />

(Expr<br />

(Expr<br />

[,Expr]...)<br />

[,Expr]...)<br />

UPDATE TabName<br />

UPDATE TabName<br />

SET<br />

SET<br />

ColName<br />

ColName<br />

=<br />

=<br />

{Expr|NULL}<br />

{Expr|NULL}<br />

[,ColName = {Expr|NULL}]...<br />

[,ColName = {Expr|NULL}]...<br />

[WHERE SearchCond]<br />

[WHERE SearchCond]<br />

DELETE FROM TabName<br />

DELETE FROM TabName<br />

[WHERE<br />

[WHERE<br />

SearchCond]<br />

SearchCond]<br />

Datenbankanwendungen mit Java<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite 19


Überblick SQL<br />

Datenbankanfrage in SQL<br />

Bsp.<br />

Schlues<br />

sel<br />

47<strong>11</strong><br />

2873<br />

9872<br />

SELECT Hersteller, Typ FROM auto WHERE<br />

baujahr > 2000;<br />

Ergebnis:<br />

Herstell<br />

er<br />

Opel<br />

Volvo<br />

BMW<br />

Volvo V50<br />

Typ<br />

Corsa<br />

V50<br />

314<br />

Datenbankanwendungen mit Java<br />

Baujahr<br />

1999<br />

2005<br />

1996<br />

Kmstand<br />

54.000<br />

123.000<br />

210.000<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite 20


Überblick SQL<br />

Datenbankabfragen in SQL<br />

Schlues<br />

sel<br />

47<strong>11</strong><br />

2873<br />

9872<br />

- Mittels SQL lassen sich auch Informationen aus mehreren Tabellen extrahieren<br />

Herstell<br />

er<br />

Opel<br />

Volvo<br />

BMW<br />

Typ<br />

Corsa<br />

V50<br />

314<br />

SELECT auto.Hersteller, auto.typ, person.Name FROM<br />

auto, person WHERE auto.Besitzer==person.ID;<br />

Ergebnis<br />

Baujahr<br />

1999<br />

2005<br />

1996<br />

Kmstand<br />

54.000<br />

123.000<br />

210.000<br />

Opel Corsa Meier<br />

Volvo V50 Schulz<br />

BMW 314 Schulz<br />

Datenbankanwendungen mit Java<br />

Besitzer<br />

1234<br />

1236<br />

1236<br />

1234<br />

1235<br />

1236<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite 21<br />

ID<br />

Name<br />

Meier<br />

Schmidt<br />

Schulz


Relationale DB-Systeme<br />

Tabellen, Index erzeugen<br />

CREATE<br />

CREATE<br />

TABLE<br />

TABLE<br />

TabName<br />

TabName<br />

(ColName<br />

(ColName<br />

DataType<br />

DataType<br />

[DEFAULT<br />

[DEFAULT<br />

ConstExpr]<br />

ConstExpr]<br />

[ColName DataType [DEFAULT ConstExpr]]...)<br />

[ColName DataType [DEFAULT ConstExpr]]...)<br />

ALTER<br />

ALTER<br />

TABLE<br />

TABLE<br />

TabName<br />

TabName<br />

ADD (ColName DataType<br />

ADD (ColName DataType<br />

[ColName<br />

[ColName<br />

DataType]...)<br />

DataType]...)<br />

CREATE<br />

CREATE<br />

[UNIQUE]<br />

[UNIQUE]<br />

INDEX<br />

INDEX<br />

IndexName<br />

IndexName<br />

ON<br />

ON<br />

TabName<br />

TabName<br />

(ColName<br />

(ColName<br />

[ASC|DESC]<br />

[ASC|DESC]<br />

[,<br />

[,<br />

ColName<br />

ColName<br />

[ASC|DESC]]...)<br />

[ASC|DESC]]...)<br />

DROP<br />

DROP<br />

TABLE<br />

TABLE<br />

TabName<br />

TabName<br />

DROP<br />

DROP<br />

INDEX<br />

INDEX<br />

IndexName<br />

IndexName<br />

Datenbankanwendungen mit Java<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite 22


JDBC<br />

Situation<br />

- Es gibt viele relationale Datenbanksysteme unterschiedlicher<br />

Hersteller<br />

Wunsch<br />

- Anbindung von Datenbanken an Anwendungen bzw. den<br />

Datenzugriff auf Datenbanken standardisieren<br />

Nutzen<br />

- Einfachere Implementierung<br />

Datenbankanwendungen mit Java<br />

- Geringere Kosten bei Portierung von einem zum anderen DB-<br />

System<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite 23


JDBC<br />

Lösung<br />

Datenbankanwendungen mit Java<br />

- Java stellt mit JDBC (Java Database Connectivity) ein<br />

einheitliches Transportprotokoll zwischen der Java-Anwendung<br />

und dem Datenbanksystem zur Verfügung<br />

- Die meisten Datenbankhersteller stellen mittlerweile<br />

entsprechende „full-Java“ JDBC-Treiber bereit, welche die<br />

Anfragen der Java-Anwendung entgegennehmen und an das<br />

DBMS weiterleiten (sog. Typ-3 bzw. Typ-4 Treiber)<br />

- alternativ „Bridges“ zwischen JDBC und ODBC (Open DB<br />

Connectivity) bzw. proprietären Schnittstellen (Sog. Typ1 bzw.<br />

Typ-2 Treiber)<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite 24


JDBC<br />

Ist damit die Austauschbarkeit von DB-Systemen<br />

problemlos?<br />

- Anbindung ist mit JDBC standardisiert<br />

Datenbankanwendungen mit Java<br />

- Über JDBC lassen sich SQL-Statements an das jeweilige DB-<br />

System übertragen. JDBC legt zunächst nicht fest, welche<br />

Anfragen übertragen werden<br />

- Treiberhersteller erfüllen den SQL-2 Entry-Level-Standard als<br />

allgemeingültige SQL-Spezifikation.<br />

- Die Funktionalität großer DB-System geht i.A. weit darüber<br />

hinaus (jedes DB-System hat seine Spezifika und „Dialekte“).<br />

- Daher: Vorsicht bei der Portierung von DB-Systemen!<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite 25


JDBC <strong>–</strong> Zugriff auf DB-System<br />

Zugriff auf DB-Systeme in Java ermöglichen die Klassen und<br />

Methoden des packagesjava.sql<br />

Schema des DB-Zugriffs aus einer Anwendung heraus<br />

- Laden und initialisieren eines DB-Treibers<br />

Class.forName("com.mysql.jdbc.Driver").newInstance();<br />

Class.forName("com.mysql.jdbc.Driver").newInstance();<br />

- Aufbau einer DB-Verbindung (Connection)<br />

Connection conn = DriverManager.getConnection(<br />

Connection conn = DriverManager.getConnection(<br />

"jdbc:mysql://localhost:3306/test","usr","pwd");<br />

"jdbc:mysql://localhost:3306/test","usr","pwd");<br />

- Erzeugen und ausführen von Anweisungsobjekten (Statement)<br />

Statement stmt = conn.createStatement();<br />

Statement stmt = conn.createStatement();<br />

ResultSet<br />

ResultSet<br />

rs<br />

rs<br />

=<br />

=<br />

stmt.executeQuery("SELECT<br />

stmt.executeQuery("SELECT<br />

columns<br />

columns<br />

FROM<br />

FROM<br />

table");<br />

table");<br />

- Auswertung der zurück gelieferten Ergebnisse (ResultSet)<br />

rs.next();<br />

rs.next();<br />

rs.getString("columnname");<br />

rs.getString("columnname");<br />

Datenbankanwendungen mit Java<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite 26


JDBC <strong>–</strong> Zugriff auf DB-System<br />

Die Connection<br />

- Ein Objekt vom Typ Connection repräsentiert eine Verbindung zur<br />

Datenbank<br />

- Sie stellt u.a. Methoden zur<br />

Erzeugung von Statements (createStatement)<br />

Erzeugung von PreparedStatements (Parametrisierte im DB-<br />

System vorkompilierte Statements)<br />

Zur Steuerung von Transaktionen* ( setAutoCommit, commit(),<br />

rollback())<br />

Zum Trennen der Verbindung<br />

zur Verfügung.<br />

Datenbankanwendungen mit Java<br />

* Die Gewährleistung der Transaktionssicherheit (sichere Ausführung einer Folge von DB-<br />

Operationen) ist einer der entscheidenden Vorteile bei DB-Systemen<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite 27


JDBC <strong>–</strong> Zugriff auf DB-System<br />

Das Statement<br />

- mit einem Objekt vom Typ Statement werden SQL-Statements<br />

an die Datenbank gesendet, i.d.R. durch die Methode<br />

executeQuery (Datenbankabfragen) und executeUpdate<br />

(Datenbankänderungen)<br />

- Als Argument von executeQuery können beliebige SQL-<br />

Statements übergeben werden<br />

- Beispiel<br />

ResultSet<br />

ResultSet<br />

rs<br />

rs<br />

=<br />

=<br />

stmt.executeQuery(<br />

stmt.executeQuery(<br />

"SELECT typ, bezeichnung FROM auto WHERE baujahr > 2000");<br />

"SELECT typ, bezeichnung FROM auto WHERE baujahr > 2000");<br />

//<br />

//<br />

Liefert<br />

Liefert<br />

ResultSet<br />

ResultSet<br />

zurück<br />

zurück<br />

Datenbankanwendungen mit Java<br />

int<br />

int<br />

r<br />

r<br />

=<br />

=<br />

stmt.executeQuery(<br />

stmt.executeQuery(<br />

"INSERT INTO Auto VALUES (1234, ‘Mercedes', ‘E 200’, 2000, 20000)");<br />

"INSERT INTO Auto VALUES (1234, ‘Mercedes', ‘E 200’, 2000, 20000)");<br />

//<br />

//<br />

Liefert<br />

Liefert<br />

Int<br />

Int<br />

Anzahl<br />

Anzahl<br />

der<br />

der<br />

erfolgreich<br />

erfolgreich<br />

eingefügten<br />

eingefügten<br />

Datensätze<br />

Datensätze<br />

zurück<br />

zurück<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite 28


JDBC <strong>–</strong> Zugriff auf DB-System<br />

Das ResultSet<br />

Datenbankanwendungen mit Java<br />

- Objekte vom Typ ResultSet repräsentieren die Ergebnismenge<br />

einer Anfrage (als Liste von Datensätzen)<br />

- mit der Methode next() kann die Liste der Datensätze<br />

schrittweise durchlaufen werden (Vorsicht: initial steht der<br />

Satzzeiger vor dem ersten Datensatz)<br />

- zu jedem Datensatz können mit den Methoden getString, getInt,<br />

... (automatische Typkonvertierung da, wo möglich und sinnvoll)<br />

die einzelnen Daten eines Datensatzes extrahiert werden<br />

(anhand der Spaltennummer oder der Spaltenbezeichnung der<br />

von dem SQL-Statement angeforderten Tabelle)<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite 29


JDBC <strong>–</strong> Zugriff auf DB-System<br />

SQLException<br />

- fehlgeschlagene DB-Methoden lösen i.d.R. Ausnahme des Typs<br />

SQLException aus. Beispiel<br />

Fehlende DB-Verbindung bei getConnection<br />

SQL-Syntaxfehler bei executeQuery<br />

- Methoden von SQLException<br />

Datenbankanwendungen mit Java<br />

int getErrorCode(): herstellerspezifische Fehlercode<br />

String getSQLState(): interner SQL-Zustandscode<br />

SQLException getNextException(): Liefert Liste von<br />

“Ausnahmeverkettung”<br />

- Methoden müssen entsprechend mit try-catch-Block behandelt<br />

werden bzw. die Exception nach oben propagieren<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite 30


Übung<br />

Datenbankanwendungen mit Java<br />

- Wir erstellen eine Anwendung, die Daten aus einer KFZ-<br />

Datenbank liest<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite 31


Architekturen<br />

2-Schichten Architektur: Aufteilung der Anwendung in Client (Arbeitsplatz) und<br />

Server (Datenbank), d.h. die Client-Anwendung kommuniziert direkt (etwa über<br />

JDBC) mit der Datenbank<br />

3-Schichten Architektur: Aufteilung in<br />

- Präsentationsschicht (Front-End): i.W. für Darstellung der Daten und Interaktion mit dem<br />

Benutzer zuständig<br />

- Logikschicht (Zwischen- oder Applikationsserver-Schicht): kapselt komplexe Operationen<br />

Stellt höherwertige Dienste (Anwendungslogik, komplexe Business-Transaktionen) dem<br />

Client zur Verfügung (via HTTP, RMI, CORBA, ...) und kapselt insbes. die Kommunikation<br />

mit der Datenbank.<br />

- Datenhaltungsschicht (Back-End): Ist für die Datenhaltung zuständig (Datenbank)<br />

n-Schichten Architektur: Applikationsserver ist wiederum unterteilt in mehrere<br />

Schichten, die jeweils spezifische Aufgaben übernehmen (Business-Layer,<br />

Persistenz-Layer). Standards: EJB (Enterprise Java Beans) standardisierte<br />

Komponenten innerhalb eines JEE-Applikationsservers<br />

Client-Anwendung<br />

JDBC<br />

DB-System<br />

Datenbankanwendungen mit Java<br />

Client-Anwendung<br />

Applikationsserver<br />

JDBC<br />

DB-System<br />

HTTP, RMI, CORBA, ...<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite 32


Agenda<br />

Wiederholung<br />

Kommunikation mit Java<br />

- RMI<br />

Datenbankanwendungen mit Java<br />

Klausurtraining<br />

- Aufgabe 4<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite 33


Klausur-Training<br />

Aufgabe 4: Polymorphismus<br />

- Gegeben seien Geometrische Figuren Kreis, Dreieck, Viereck,<br />

die jew. durch eine Klasse mit einer Methode getFläche()<br />

implementiert sind. In einer Klasse Zeichnung werden alle in<br />

einem Objekt verwendeten geometrischen Figuren in einem<br />

Vector verwaltet. Die Klasse implementiert außerdem<br />

getGesamtflaeche(), welche die Summe aller Flächen der<br />

geom. Figuren ist.<br />

Erläutern Sie, wie die Methode getFlaeche() auf Objekte<br />

unterschiedlichen Typs angewendet werden kann<br />

Geben Sie eine Implementierung der Methode<br />

getGesamtflaeche() an<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite 34


Danke für Ihre Aufmerksamkeit!<br />

☺<br />

Vorlesung <strong>Informatik</strong> <strong>II</strong> Seite 35

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!