Informatik II – Vorlesungstag 11
Informatik II – Vorlesungstag 11
Informatik II – Vorlesungstag 11
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 <, >, &, &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