7. Design und Datenbanken 21. Mai 2002 Ziel • Grundbegriffe aus

Werbung
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
7. Design und Datenbanken
21. Mai 2002
Ziel
• Grundbegriffe aus ERM, SQL, JDBC, EJB-Entity
Beans kennenlernen
• Verständnis dafür, wie eine relationale Datenbank
angesteuert werden kann
• Einige zentrale Mechanismen der Software-Architektur
im DB Umfeld kennen („Transaktionen“)
21. Mai 2002
Dr. Walter Kuhn
Einführung ins Software Engineering - Design und Datenbanken
-2-
1
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
Motivation
• Ohne „Datenhaltung“ fehlt uns was
• Was bedeutet eigentlich Datenmodellierung?
• Wie kann das in die Systemarchitektur und –
Konzeption eingebracht werden?
– Separation der Datenhaltung (→ Architektur)
– Allgemeine Sprache: SQL
• Notwendigkeit: Zugriff auf DB aus einem Programm
heraus
– Database-APIs, um DB in Java,.. anzusprechen
– SQL-Kommandos automatisch erzeugen und ausführen (statt
im Dialog)
21. Mai 2002
Einführung ins Software Engineering - Design und Datenbanken
-3-
Agenda
•
•
•
•
•
Modellbildung ERM
SQL
JDBC
Entity Beans
(Daten als Komponenten)
Web-Server
Web-Client
21. Mai 2002
Dr. Walter Kuhn
Servlets
JSP
EJB
Oder
Java Bean
JDBC
Einführung ins Software Engineering - Design und Datenbanken
DB
-4-
2
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
Grundbegriffe im ER-Modell
• Entität / entity
– individuelles, identifizierbares Exemplar
– beschrieben durch Eigenschaften
– Vergleiche mit Objekt !
• Entitätsmenge / entity set
– Zusammenfassung von Entitäten mit gleichartigen Eigenschaften
– Name (Substantiv) als Oberbegriff für alle Entitäten der Menge
– Vergleiche mit einer Klasse, auch genannt „Objekttyp“ o. „Entitätstyp“
• Attribut / attribut, property
–
–
–
–
Eigenschaft von allen Entitäten einer Entitätsmenge
Name entsprechend fachlicher Bedeutung
vorgegebener Wertebereich (auch „Domäne“ domain)
beschreibende / identifizierende Attribute
21. Mai 2002
Einführung ins Software Engineering - Design und Datenbanken
-5-
Grundbegriffe im ER-Modell (2)
• Schlüssel / key
– minimale identifizierende Attributkombination
– mehrere Schlüssel möglich → Primärschlüssel wählen (Notation: oft
Unterstrichen)
• Assoziation / relationship
– Zusammenfassung von gleichartigen Beziehungen zwischen Entitäten
– Name (Verbform) als Oberbegriff für die gleichartigen Relationen
zwischen den Entitäten zweier Entitätsmengen
– kann ebenfalls Attribute haben
• Kardinalität
– Quantifiziert die Auftrittshäufigkeit von Entitäten in einer Assoziation
– Schreibweise
• X:Y in der MC-Notation (Multiple, Choice)
• (min1,max1) : (min2,max2) in der numerischen Notation
21. Mai 2002
Dr. Walter Kuhn
Einführung ins Software Engineering - Design und Datenbanken
-6-
3
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
Entity-Relationship-Modell – 1:1 bzw. 1:C – Assoziationen
Entitätsmenge Person
Entitätsmenge ID-Ausweis
Charlie Brown
ID:BC-USA-1234567890
ID:CK-Krypton-dfwurh3948
Clark Kent
IDJB007shakennotstirred
James Bond
1:1 : der Entitiät „James Bond“ wird (in diesem Beispiel) eindeutig der Ausweis mit
der Bezeichnung „ IDJB007shakennotstirred“ zugeordnet.
1:C : einer Entität wird genau ein oder gar kein Ausweis zugeordnet (Conditional)
Graphische Darstellung (ER-Notation)
Person
21. Mai 2002
1
1
Gehört zu
1 IdentitätsC ausweis
Einführung ins Software Engineering - Design und Datenbanken
-7-
Entity-Relationship-Modell – 1:N bzw. 1:NC – Assoziationen
Entitätsmenge Person
Entitätsmenge Bankkonto
Charlie Brown
01234-987654321
2468-ab1234568764
545127780944
987345102938
8492730123456aq
Clark Kent
James Bond
1:N : der Entitiät „James Bond“ wird (in diesem Beispiel) mehrere (≥ 1 ) Bankkonten
zugeordnet. Allen Konto jedoch ist gemein, genau einen Besitzer zu haben.
1:NC: jede Person kann ein oder mehrere Konten haben, oder auch keines.
Ein Konto ist aber eindeutig einer Person zugeordnet
Graphische Darstellung (ER-Notation)
Person
21. Mai 2002
Dr. Walter Kuhn
1
1
besitzt
N
NC
Bankkonto
Einführung ins Software Engineering - Design und Datenbanken
-8-
4
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
Entity-Relationship-Modell – N:M bzw. NC:MC – Assoziationen
Entitätsmenge Person
Entitätsmenge Bank
Charlie Brown
First Credit
myBank
Krypton Worth
Bermudas Best
European National Bank
Clark Kent
James Bond
M:N bedeutet hier: jede Entität Person kann Kunde bei mehreren (≥ 1) Banken sein,
die Ihrerseits jeweils mehrere (≥ 1) Kunden haben können.
M:NC jede Person kann eine, mehrere oder auch keine Bankbeziehung haben.
MC:NC: ditto, ausserdem gibt es auch Banken ohne Kunden
Graphische Darstellung (ER-Notation)
Person
21. Mai 2002
M
M
MC
Kundenbeziehung
N
Bank
NC
NC
Einführung ins Software Engineering - Design und Datenbanken
-9-
Entity-Relationship-Modell – Kardinalitäten
Menge 2
Menge 1
muss
kann
21. Mai 2002
Dr. Walter Kuhn
1
M
C
MC
muss
1
1:1
M:1
C:1
MC:1
N
1:N
M:N
C:N
MC:N
kann
C
1:C
M:C
C:C
MC:C
Einführung ins Software Engineering - Design und Datenbanken
NC
1:NC
M:NC
C:NC
MC:NC
-10-
5
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
Kardinalitäten von Assoziationen – Alternative Darstellungen
• ACHTUNG: numerische Notation wird umgekehrt
gelesen wir NC Notation
• Beispiel 1: ein A hat 0 bis viele (n) B. Ein B hat genau
ein A.
A
A
1
NC
(0,n)
(1,1)
M
N
(1,n)
A
B
(1,m)
M
C
(0,1)
21. Mai 2002
B
B
(1,m)
Einführung ins Software Engineering - Design und Datenbanken
-11-
Entity-Relationship-Modell – Vergleich
Kantennotationen
MC
Notation
Numerische
Notation
C
(0,1)
A
B
A
B
1
(1,1)
A
B
A
B
MC
(0,n)
A
B
A
B
M
(1,n)
A
B
A
B
21. Mai 2002
Dr. Walter Kuhn
KrähenfussNotation
Pfeil-Notation
Einführung ins Software Engineering - Design und Datenbanken
-12-
6
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
Rekursive Assoziationen
• Entitätsmenge in Beziehung mit sich selbst
– Diagramm: um Rollennamen erweitert
– Jede Person kann 0 bis m Kinder haben
– Jedes Kind hat einen Vater
Kind
MC
ist
Vater von
Person
1
Vater
21. Mai 2002
Einführung ins Software Engineering - Design und Datenbanken
-13-
Erweiterung des ERM: semantische Modellierung (1)
• Aggregation
–
–
–
–
Assoziation, die Über-/Unterordnung beschreibt
meist „ist-Teil-von“ ("is-part-of ")
Verknüpft Entitäten
Bsp: Motor kann in Auto eingebaut sein, oder (noch) nicht
Auto
C
part-of
part-of
1
M
Motor
21. Mai 2002
Dr. Walter Kuhn
C
Rad
C
part-of
1
Karosserie
Einführung ins Software Engineering - Design und Datenbanken
-14-
7
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
Erweiterung des ERM: semantische Modellierung (2)
• Generalisierung
–
–
–
–
Assoziation, die Hierarchie modelliert
Verknüpft Entitätsmengen
meist „ist-ein“ ("is-a")
Attribute werden vererbt, weitere Attribute kommen hinzu
Person
is-a
Kunde
21. Mai 2002
Generalisierungstyp
is-a
Spezialisierungstypen
Dozent
Einführung ins Software Engineering - Design und Datenbanken
-15-
Entity-Relationship-Modell – Bewertung
Positiv
• Einfache, graphische Form
• CASE Tools unterstützen Abbildung auf Datenbanken
• Recht universell anwendbar
• Standard!
Negativ
• Keine Hierarchisierung bzw. Verfeinerung von Datenobjekten
(Unübersichtlich)
• Unterschied Entity versus Relationship scheint willkürlich
• Wann ist ein Datenmodell abgeschlossen?
• Umgang mit komplexen Datenmodellen?
Bemerkung: man kann ERM mit UML realisieren bzw.
abbilden!
Genug modelliert – jetzt wird tabelliert!
21. Mai 2002
Dr. Walter Kuhn
Einführung ins Software Engineering - Design und Datenbanken
-16-
8
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
Tabellendarstellung
• Jede Entitätsmenge wird zu einer Tabelle
• Jede Entität wird zu einem Tabelleneintrag (Zeile)
• Kurzname ist der Primärschlüssel, muss eindeutig sein
Person
Kurzname
wkuhn
srizotti
...
21. Mai 2002
Name
Walter Kuhn
Sven Rizotti
...
Adresse
Meine Strasse 99,...
Dein Weg 20,...
...
Einführung ins Software Engineering - Design und Datenbanken
-17-
Tabellendarstellung (2)
• Jede 1:1- oder M:1 -Assoziation zwischen A und B
wird als zusätzliches Attribut in A eingetragen
– zusätzliches Attribut muß in B ein Schlüssel sein =
“Fremdschlüssel”
Person (B)
1
hat
M
Konto (A)
Konto
KontoNr
Wert
Kurzname
0815
42
wkuhn
4711
101
wkuhn
2105
9999
srizotti
21. Mai 2002
Dr. Walter Kuhn
Fremdschlüssel aus Person
Einführung ins Software Engineering - Design und Datenbanken
-18-
9
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
Tabellendarstellung (3)
• Jede M:N-Assoziation zwischen A und B wird durch
eine eigene Tabelle dargestellt
– Paare aus Schlüsseln zu A und zu B
– weitere Attribute möglich
Student
M
N
besucht
Vorlesung
besucht
MatrikelNr
10
10
27
...
21. Mai 2002
VorlesungsNr
94
22
37
...
TestatVom
01.01.2002
01.04.2002
24.05.2002
...
Einführung ins Software Engineering - Design und Datenbanken
-19-
Entity-Relationship-Modell – CRUD Matrix
Daten Kunde
Konto
Firma
Zahlungsverzug ….
Funktionen
Erfasse Kundenstamm
c
Aktualisiere
Kundenstamm
u
Lösche Kundenstamm
d
Erstelle Adressaufkleber
r
Erstelle Kontoauszug
r
Create
Read
Update
Delete
[Balz96]
Dr. Walter Kuhn
21. Mai 2002
r
r
Hilfreich für Überlegungen, welche Daten mit welchen
Funktionen / Methoden wie bearbeitet werden sollen
Einführung ins Software Engineering - Design und Datenbanken
-20-
10
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
Agenda
•
•
•
•
•
Modellbildung ERM
SQL
JDBC
Entity Beans
(Daten als Komponenten)
Web-Server
Web-Client
21. Mai 2002
Servlets
JSP
EJB
Oder
Java Bean
JDBC
Einführung ins Software Engineering - Design und Datenbanken
DB
-21-
SQL
• SQL
– Sprache für Datendefinition, -manipulation, -schutz
– Basis: Relationenmodell (Begriffe Relation, Tupel, Tabelle,.. bekannt)
– nichtprozedural: Eine Anfrage beschreibt die Bedingung, die erfüllt sein
muß, damit ein Datenelement zur Antwortmenge gehört
– mengenorientiert: Eine Anfrage liefert eine Menge von Tupeln zurück.
– Definition der Sprache durch Standards: SQL-86, SQL-92 („SQL-2“);
SQL-99
• Wie nun mit den Tabellen umgehen
– Erzeugen → DDL – Data Description Language
– Daten einfüllen, ändern, löschen → DML – Data Manipulation Language
– …
• DBMS haben meist
– Eine Kontrollinstanz, in die SQL eingegeben werden kann
– Ein (oder mehrere) API´s, um dasselbe per Software zu tun
21. Mai 2002
Dr. Walter Kuhn
Einführung ins Software Engineering - Design und Datenbanken
-22-
11
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
SQL – wichtigste Kommandos
• Data Definition Language (DDL)
– ALTER INDEX, ALTER SEOUENCE, ALTER TABLE,
– CREATE INDEX, CREATE SEOUENCE, CREATE SYNONYM,
CREATE TABLE, CREATE VIEW,
– DROP INDEX, DROP SEQUENCE, DROP SYNONYM, DROP
TABLE, DROP VIEW,
– GRANT, REVOKE
• Data Manipulation Language (DML)
– DELETE, INSERT, LOCK TABLE, SELECT, UPDATE
• Transaction Control Kommando
– COMMIT, ROLLBACK, SAVEPOINT, SET TRANSACTION
• Session Control Kommando
– ALTER SESSION
21. Mai 2002
Einführung ins Software Engineering - Design und Datenbanken
-23-
SQL DDL Create
• Erzeuge DB
CREATE DATABASE <db_name> ;
• Erstelle (Lösche) Tabelle
CREATE TABLE <table_name> (
<column1_name> <column1_type> <column1_constraint>,
<comumn2_name> <column2_type> <column2_constraint>,
... );
DROP TABLE <table_name> ;
– Jede Spalte benennen, Datentyp festgelegen
– Spaltenconstrainsts sind z.B.
Dr. Walter Kuhn
•
•
•
•
Festlegung des Primärschlüssels [PRIMARY KEY]
Verbieten von Doppelnennung [UNIQUE]
Verbieten des NULL-Wertes [NOT NULL]
Defaultwerte (Wert oder Autoinkrementierung).
21. Mai 2002
Einführung ins Software Engineering - Design und Datenbanken
-24-
12
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
SQL DML Select (1)
• SELECT … FROM … WHERE .. Order By … ;
• SELECT
– wähle Menge von Spalten (* = alle) oder abgeleitete
Spaltenwerte
• FROM
– wählt eine Tabelle oder eine Liste von Tabellen
• WHERE
– wählt bestimmte Zeilen
• ORDER BY
– sortiert die Ausgabe
21. Mai 2002
Einführung ins Software Engineering - Design und Datenbanken
-25-
SQL DML Select (2)
• Selektion: Auswahl bestimmter Tupel (Zeilen)
Select * from Table1 where NAME=„meier“;
• Projektion: Auswahl bestimmter Spalten
Select TOTAL from Table1;
• Kombination sind auch möglich
Select Anrede, Name, Vorname
from Person
where PersonalNr in (
Select PersonalNr from Student
Union
Select PersonalNr from Dozent);
21. Mai 2002
Dr. Walter Kuhn
Einführung ins Software Engineering - Design und Datenbanken
-26-
13
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
SQL DML Insert
• Einfügen
INSERT [INTO] <table> [(column_name,...)]
VALUES (expression,...);
• Beispiel
CREATE TABLE mitarbeiter (
id INT PRIMARY KEY, vname VARCHAR(15),
nname VARCHAR(30), gdate DATE,
gehalt FLOAT, plz INT, str VARCHAR(30) );
INSERT INTO mitarbeiter VALUES(
007, 'James',
'Bond', '1952-03-02',
1600000, 33600, 'Goldfingerweg 17') ;
21. Mai 2002
Einführung ins Software Engineering - Design und Datenbanken
-27-
SQL DML Update
• Zeilen ändern: UPDATE .. SET
UPDATE <table> SET column_name1=expression1 [,...]
[WHERE ...];
• Beispiel
UPDATE mitarbeiter
SET nname='Einstein', plz=12345
WHERE id=0816;
UPDATE mitarbeiter
SET gehalt = gehalt * 1.03;
UPDATE mitarbeiter
SET gehalt = 1000
WHERE gehalt IS NULL;
21. Mai 2002
Dr. Walter Kuhn
Einführung ins Software Engineering - Design und Datenbanken
-28-
14
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
SQL DML Delete
• Zeilen löschen
DELETE FROM <table> [WHERE ...];
• Beispiel
DELETE FROM mitarbeiter
WHERE id=4711;
21. Mai 2002
Einführung ins Software Engineering - Design und Datenbanken
-29-
Technische Schnittstellen für SQL in API´s
• ODBC
– Open DataBase Connectivity,
– Microsoft: C-Schnittstelle, begrenzt auf MS-Windows
• JDBC
– Java DataBase Connectivity, Sun Microsystems
– Java-Schnittstelle, Anschluß an DB direkt oder mittelbar über ODBC
• Embedded SQL
– Mischprogramm aus C- und SQL-Statements,
wird in zwei Stufen übersetzt
• Datenbank- und Programmiersprachen-spezifische
Schnittstellen
– Beispielsweise "libpq" für Postgres: C-Library, begrenzt auf Postgres
21. Mai 2002
Dr. Walter Kuhn
Einführung ins Software Engineering - Design und Datenbanken
-30-
15
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
Agenda
•
•
•
•
•
Modellbildung ERM
SQL
JDBC
Entity Beans
(Daten als Komponenten)
Web-Server
Web-Client
Servlets
JSP
21. Mai 2002
EJB
Oder
Java Bean
JDBC
DB
Einführung ins Software Engineering - Design und Datenbanken
-31-
Java Database Connectivity (JDBC)
• API Spezifikation März 1996
• Basiert auf X/Open SQL-Call Level Interface
• API zur Anbindung relationaler Datenbanken –
DB-DDL&DML ist SQL
–
–
–
–
Konkrete Implementierung als Klasse laden
Verbindung zur DB herstellen
SQL Befehle absetzen
Auswertung der Ergebnisse
DB-Client
JDBC Driver
• 4 JDBC-Treibertypen
1. JDBC-ODBC-Bridge
(für ODBC fähige DB)
2. plattformeigene JDBC-Treiber
3. universelle JDBC-Treiber
4. direkte JDBC-Treiber
21. Mai 2002
Dr. Walter Kuhn
Einführung ins Software Engineering - Design und Datenbanken
-32-
16
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
JDBC (Scope JDBC 2.0)
• Packages
– Kern-Klassen: java.sql
– Java Standard Extensions: javax.sql
• JDBC Core
– Muss von allen JDBC Treibern implementiert sein
– Umfassen 90% der Interaktionen mit DB
– JDBC Metadata: Informationen über DB selber
• JDBC Java Language Extensions & Utilities
– Datentypen Brücke zwischen SQL und Java
– Datums- und Zeithandling
– Ausnahmen
21. Mai 2002
Einführung ins Software Engineering - Design und Datenbanken
-33-
JDBC API 3.0 Specification Final Release (von Sun-Website)
• JDBC API v. 3.0 is included in J2SE 1.4.
• The JDBC Optional Package will be packaged with the
core API and be included as part of J2SE.
• Other major changes include:
– Connection Pool configuration enhancements
– Statement pooling for Pooled Connections
– description of the migration path from the JDBC SPI
(Service Provider Interface) to the Connector Architecture.
– The latest SDK includes a JDBC-ODBC Bridge driver that
makes most Open Database Connectivity (ODBC) drivers
available to programmers using the JDBC API.
21. Mai 2002
Dr. Walter Kuhn
Einführung ins Software Engineering - Design und Datenbanken
-34-
17
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
java.sql Package (Basis JDBC 2.0)
•
Aufbau einer Verbindung zu einer Datenbank
– DriverManager class verwaltet (mehrere) JDBC-Treiber & verteilt ConnectionObjekte
– Driver interface: jeder JDBC Hersteller muss diese Methoden implementieren
– DriverPropertyInfo class: Eigenschaften und ihre momentane Belegungen
– Connection interface: Ein Connection Objekt verwaltet
• Sitzung, definiert eine Umgebung für SQL-Anweisungen und ihre Ergebnisse.
• Informationen über Zustand der verbundenen DB (getMetaData() → DatabaseMetaData)
• createStatement-Methode erzeugt ein Statement-Objekt
•
Aufruf von SQL statements
– Statement interface: Senden von SQL Anweisungen, Verwaltung der Ergebnisse
– PreparedStatement interface: Objekt dient als Container für eine vorkompilierte,
mehrfach anwendbare SQL-Anweisung
– CallableStatement interface: Aufruf von stored procedures aus der DB
•
•
•
•
Datenbank Ergebnisse (und Update) mit Cursor: ResultSet interface
Meta-Informationen über Ergebnismenge: ResultSetMetaData interface
Meta-Informationen über Datenbank: DatabaseMetaData interface
Providing security : SQLPermission interface
21. Mai 2002
Einführung ins Software Engineering - Design und Datenbanken
-35-
java.sql Package (Basis JDBC 2.0)
•
•
•
Mapping an SQL value to the standard mapping in the Java programming language
– Array interface
– Blob interface
– Clob interface
– Date class
– Ref interface
– Struct interface
– Time class
– Timestamp class
– Types class
Custom mapping an SQL user-defined type to a class in the Java programming language
– SQLData interface
– SQLInput interface
– SQLOutput interface
Throwing exceptions
– SQLException thrown by most methods when there is a problem accessing data and by some
methods for other reasons
– SQLWarning thrown to indicate a warning
– DataTruncation thrown to indicate that data may have been truncated
– BatchUpdateException: indicates that not all commands in a batch update executed successfully
21. Mai 2002
Dr. Walter Kuhn
Einführung ins Software Engineering - Design und Datenbanken
-36-
18
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
Package javax.sql
•
Interface Summary
–
–
–
–
–
–
–
–
–
–
–
–
•
ConnectionEventListener: register to receive events generated by a PooledConnection.
ConnectionPoolDataSource object is a factory for PooledConnection objects.
DataSource object is a factory for Connection objects.
PooledConnection object is a connection object that provides hooks for connection pool
management.
RowSet adds support to the JDBC API for the JavaBeans(TM) component model.
RowSetInternal object presents itself to a reader or writer as an instance of
RowSetInternal
RowSetListener is implemented by a component that wants to be notified when a
significant event happens in the life of a RowSet
RowSetMetaData extends ResultSetMetaData to allow a metadata object to be initialized.
RowSetReader An object implementing the RowSetReader interface may be registered
with a RowSet object that supports the reader/writer paradigm.
RowSetWriter An object that implements the RowSetWriter interface may be registered
with a RowSet object that supports the reader/writer paradigm.
XAConnection object provides support for distributed transactions.
XADataSource A factory for XAConnection objects.
Class Summary
– ConnectionEvent provides information about the source of a connection related event.
– RowSetEvent is generated when something important happens in the life of a rowset, like
when a column value changes.
21. Mai 2002
Einführung ins Software Engineering - Design und Datenbanken
-37-
Ablauf der Kommunikation mit einer JDBC DB
21. Mai 2002
Dr. Walter Kuhn
Einführung ins Software Engineering - Design und Datenbanken
-38-
19
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
1. Nutzung eines spezifischen DB-Drivers
• Treiberdatei (*.zip, *.jar) in CLASSPATH aufnehmen
• Treiber registrieren. Varianten
– Aufruf der Java-Anwendung mit Parameter
java -Djdbc.drivers=com.MyDB.myDriver JdbcClass
– Explizites Laden der Treiber-Klasse, z.B.
Class.forName ("com.MyDB.myDriver");
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
…
– Objekt der Treiberklasse erzeugen & registrieren
DriverManager.registerDriver(
new com.MyDB.myDriver);
21. Mai 2002
Einführung ins Software Engineering - Design und Datenbanken
-39-
2. Aufbau einer Datenbankverbindung
java.sql.Connection
• Datenbankverbindung vom DriverManager anfordern.
Connection con = DriverManager.getConnection (String
url,String username,String password);
• url: Ort der DB
• Syntax: <Protokoll>:<Subprotokoll>:<Subname>
• Beispiele:
– jdbc:odbc:registeredDB
– jdbc:db2:localSample
– jdbc:db2://server:1234/test
ODBC-DB (Typ 1)
lokale DB (Typ 2)
remote DB (Typ 3,4)
• username & password: Authentifizierung am DBMS
21. Mai 2002
Dr. Walter Kuhn
Einführung ins Software Engineering - Design und Datenbanken
-40-
20
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
3. Benutzung der DB
java.sql.Statement und java.sql.ResultSet
• Statement wird aus Connection erzeugt
Statement stmt = con.createStatement();
• UDATE, INSERT, o.ä., mit SQL Syntax:
int rc = stmt.executeUpdate ("CREATE TABLE table1
(NAME VARCHAR(32), TOTAL INTEGER)");
rc = stmt.executeUpdate
("INSERT INTO table1 VALUES ('abc',42)");
• Abfrage mit SELECT ergibt ResultSet
Resultset rs = stmt.executeQuery
(„SELECT * FROM table1 ");
• Rückgabetyp nicht bekannt => nutze
boolean rc = stmt.execute (string_mit_Statement);
21. Mai 2002
Einführung ins Software Engineering - Design und Datenbanken
-41-
4. Abfrage der Ergebnismenge
• Cursor eines ResultsSet zeigt auf die jeweils bearbeitete Zeile
– ResultSet setzt Cursor beim Erzeugen vor ersten Datensatz
– Iterieren zum nächsten Datensatz mit boolean rs.next();
• Auslesen eines Attributes eines Datensatz mit getXXX();
• Beispiel (Tabelle von vorher)
int zahl = rs.getInt (1); // Spaltenindex
String name = rs.getString ("name"); // Spaltenname
// Auslesen einer Tabelle
while (rs.next()) {
name = rs.getString(1);
zahl = rs.getInt(2);
}
• Typenumwandlung: Die meisten Java-Datentypen können in
einen SQL-Typ gewandelt werden
21. Mai 2002
Dr. Walter Kuhn
Einführung ins Software Engineering - Design und Datenbanken
-42-
21
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
Liste der getXXX operationen
•
•
•
•
•
•
•
•
•
TINYINT: getByte (recommended) , getShort, getInt, getLong, getFloat,
getDouble, getBigDecimal, getBoolean, getString, getObject
SMALLINT: getShort (recommended), getByte, getInt, getLong, getFloat,
getDouble, getBigDecimal, getBoolean, getString, getObject
INTEGER: getInt (recommended), getByte, getShort, getLong, getFloat,
getDouble, getBigDecimal, getBoolean, getString, getObject
BIGINT: getLong (recommended), getByte, getShort, getInt, getFloat,
getDouble, getBigDecimal, getBoolean, getString, getObject
REAL: getFloat (recommended), getByte, getShort, getInt, getLong,
getDouble, getBigDecimal, getBoolean, getString, getObject
FLOAT: getDouble (recommended), getByte, getShort, getInt, getLong,
getFloat, getBigDecimal, getBoolean, getString, getObject
DOUBLE: getDouble (recommended), getByte, getShort, getInt, getLong,
getFloat, getBigDecimal, getBoolean, getString, getObject
DECIMAL: getBigDecimal (recommended), getByte, getShort, getInt,
getLong, getFloat, getDouble, getBoolean, getString, getObject
NUMERIC: getBigDecimal (recommended), getByte, getShort, getInt,
getLong, getFloat, getDouble, getBoolean, getString, getObject
21. Mai 2002
Einführung ins Software Engineering - Design und Datenbanken
-43-
Liste der getXXX operationen (2)
•
•
•
•
•
•
•
•
•
•
BIT: getBoolean (recommended), getByte, getShort, getInt, getLong, getFloat,
getDouble, getBigDecimal, getString, getObject
CHAR: getString (recommended), getByte, getShort, getInt, getLong, getFloat,
getDouble, getBigDecimal, getBoolean, getDate, getTime, getTimestamp,
getAsciiStream, getUnicodeStream, getObject
VARCHAR: getString (recommended), getByte, getShort, getInt, getLong, getFloat,
getDouble, getBigDecimal, getBoolean, getDate, getTime, getTimestamp,
getAsciiStream, getUnicodeStream, getObject
LONGVARCHAR: getAsciiStream, getUnicodeStream (both recommended),
getByte, getShort, getInt, getLong, getFloat, getDouble, getBigDecimal,
getBoolean, getString, getDate, getTime, getTimestamp, getObject
BINARY: getBytes (recommended), getString, getAsciiStream, getUnicodeStream,
getBinaryStream, getObject
VARBINARY: getBytes (recommended), getString, getAsciiStream,
getUnicodeStream, getBinaryStream, getObject
LONGVARBINARY: getBinaryStream (recommended), getString, getBytes,
getAsciiStream, getUnicodeStream, getObject
DATE: getDate (recommended), getString, getTimestamp, getObject
TIME: getTime (recommended), getString, getTimestamp, getObject
TIMESTAMP: getTimestamp (recommended), getString, getDate, getTime,
getObject
21. Mai 2002
Dr. Walter Kuhn
Einführung ins Software Engineering - Design und Datenbanken
-44-
22
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
JDBC 2.0: scrollable cursors (1)
• ResultSets mehrmals in beliebiger Richtung auslesen
• Operationen beziehen sich auf aktuelle Zeile
(Feldoperationen, Zeilenoperationen,
Cursorbewegungen) eines ResultSet rs
• Dazu muss Statement entsprechend erzeugt werden
• Beispiel
Statement stmt= con.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE)
21. Mai 2002
Einführung ins Software Engineering - Design und Datenbanken
-45-
JDBC 2.0: scrollable cursors (2)
• JDBC 2.0 unterstützt ausser next() Bewegungen des Cursors
–
–
–
–
–
rs.beforeFirst(); // vor die 1. Zeile
rs.afterLast(); // nach die letzte Zeile
rs.previous(); // Rückwärts laufen
rs.absolute(4); // cursor auf 4. Zeile
rs.relative(-3); // cursor relativ 3 Z.zum Anfang
• Positionsbestimmung
–
–
–
–
rs.isFirst()
rs.isLast()
rs.isBeforeFirst()
rs.isAfterLast()
• Anzahl der Zeilen
– rs.last(); rs.getRow()
21. Mai 2002
Dr. Walter Kuhn
Einführung ins Software Engineering - Design und Datenbanken
-46-
23
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
ResultSet Typen (wichtig fürs scrolling)
•
TYPE_FORWARD_ONLY
– Cursor nur vorwärts
– Je nach Implementation DBMS Änderungen in Daten sofort ersichtlich oder nicht
•
TYPE_SCROLL_INSENSITIVE
– Scrollable Cursor
– Änderungen in den Daten in der Regel nicht sofort ersichtlich
•
TYPE_SCROLL_SENSITIVE
– Scrollable Cursor
– Änderungen in den Daten werden sichtbar
– Je nach Implementation bleibt Reihenfolge der Zeilen erhalten oder nicht
•
CONCUR_READ_ONLY
– Einziger Typ in JDBC 1.0 API
– Keine Updates möglich
– Gute Performance
•
CONCUR_UPDATABLE
– Seit JDBC 2.0 core API vorhanden
– Updates möglich
– Write-Locks - geringere Performace. Je nach DB nur 1 User
21. Mai 2002
Einführung ins Software Engineering - Design und Datenbanken
-47-
Streams für grosse Datenfelder
• getXXX liefert Daten en bloc. Bis zu
Statement.getMaxFieldSize grosse Felder sind
LONGVARCHAR, LONGVARBINARY und seit JDBC 2.0
BLOB (Binary Large Object) und CLOB (Character
LargeObject)
• Der Zugriff kann auch über Streams erfolgen:
– getBinaryStream: keinerlei Konversion. Reiner Bytestrom.
– getAsciiStream: Ein-Byte ASCII-Zeichen.
– getUnicodeStream: Zwei-Byte Unicode (deprecated, use
getCharacterStream)
– getCharacterStream (JDBC 2.0): liefert java.io.Reader mit Unicode,
• unabhängig vom DB-Format
21. Mai 2002
Dr. Walter Kuhn
Einführung ins Software Engineering - Design und Datenbanken
-48-
24
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
Nullwerte
• Je nach get-Methode wird für NULL zurückgeliefert (0 != null)
– null, wenn ein Java-Objekt zurückgeliefert wird: getString, getBytes,
getDate, ...
– 0, wenn eine Zahl zurückgeliefert wird: getByte, getShort, getInt,
getLong, getFloat, getDouble
– false bei getBoolean
• Prüfung, ob SQL-NULL (Leeres Attribut eines Datensatzes):
muss gefangen werden mit der Methode ResultSet.wasNull()
name = rs.getString (1);
if (rs.wasNull())
... // Behandlung
• Bemerkung: der Einsatz von Nullwerten bedeutet den Einsatz
einer 3-wertigen Logik, die je nach Fall schwer zu durchschauen
sein kann. Es ist sinnvoll, zu prüfen, ob statt dessen DefaultWerte nützlicher sind (NOT NULL).
21. Mai 2002
Einführung ins Software Engineering - Design und Datenbanken
-49-
Prepared Statement
• Sohnklasse von Statement
• Wird an DB geschickt, dort vorkompiliert und später an
Parameter gebunden. Nutzen: bessere Performance bei
mehrfachem Aufruf
• Anweisung mit ‘?‘ parametrisiert
PreparedStatement updateTable =
con.prepareStatement ("UPDATE table1 SET total =
? WHERE NAME LIKE ? ");
• Variablen binden. 1. Parameter ist Position des ersten ‘?‘
updateTable.setInt(1, 43); // TOTAL
updateTable.setString(2, „xyz"); // NAME
• Anweisung mit executeUpdate oder executeQuery ausführen
updateTable.executeUpdate();
21. Mai 2002
Dr. Walter Kuhn
Einführung ins Software Engineering - Design und Datenbanken
-50-
25
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
CallableStatement
• Sohnklasse von PreparedStatement
• Wird bei Stored Procedures verwendet . Es gibt Ein- und
Ausgabeparameter
• Stored Procedures laufen in der Datenbank => Performance
• Erzeugung wie PreparedStatment
CallableStatement stmt =
con.CallableStatement ("CALL AFunc (?,?)");
• Bei Out-Parameter muss der SQL-Typ angegeben werden
stmt.registerOutParameter (1,
java.sql.Types.Integer);
• Danach Out-Parameter auslesen mit
int aTest = stmt.getInt(1);
21. Mai 2002
Einführung ins Software Engineering - Design und Datenbanken
-51-
DatabaseMetaData
• Interface, über welches Infos über eine verbundene
Datenbank abgefragt werden
• Erzeugen eines Objekts aus einer Connection mit:
DatabaseMetaData dbmd = con.getMetaData();
• Viele Methoden, um alle möglichen Informationen
über die Datenbank auszulesen, z. B.
getDatabaseProductName()
getDriverVersion()
getMaxStatements()
supportsStoredProcedures()
….
21. Mai 2002
Dr. Walter Kuhn
Einführung ins Software Engineering - Design und Datenbanken
-52-
26
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
ResultsetMetaData
• Interface, über das Informationen über ein AbfrageErgebnis abgefragt werden
• Erzeugen eines Objekts aus einem Resultset mit:
ResultsetMetaData rsmd = rs.getMetaData();
• Viele Methoden, um alle Informationen über das
ResultSet auszulesen, z. B.
int getColumnCount()
String getColumnName(int column)
int isNullable(int column)
…
21. Mai 2002
Einführung ins Software Engineering - Design und Datenbanken
-53-
Transaktionen
• Denken Sie an das Beispiel der Vorlesung (Tafelanschrieb) – 2
Konten mit einer Buchung von einem Konto auf das andere
• Default: jedes SQL-Statement in eigenem Transaktionskontext
• Prüfe die Art der Transaktionkontrolle
boolean b = con.getAutoCommit();
• Aktivierte explizite, manuelle Transaktionskontrolle
Connection.setAutoCommit(false)
• Eine Transaktion startet implizit
• Terminiere Transaktion
Connection.commit()
Connection.rollback()
• Zusätzliche Methoden für Isolationslevel ..
21. Mai 2002
Dr. Walter Kuhn
Einführung ins Software Engineering - Design und Datenbanken
-54-
27
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
Connection Pooling
• Connections öffnen & schliessen ist teuer (Zeit,
Systemresourcen)
– Daher Connections wiederverwenden: Pool von
Connections. Dort werden bei Bedarf Connections
angefordert.
– Die Rückgabe erfolgt durch die Methode close() der
Connection
• Der Connection-Manager ist die Klasse DataSource.
Über diese Klasse Connections poolen.
• Hinweis fürs Praktikum: Connection z.B. im init()
eines Servlets realisieren, über die Threads geeigneter
Zugriff
21. Mai 2002
Einführung ins Software Engineering - Design und Datenbanken
-55-
JDBC 2.0 – BATCH
• Batch Jobs bei Statements: mehrere Statements als eine Einheit
ausführen. Nutzen: Performance
stmt = con.createStatement();
stmt.addBatch ("CREATE TABLE table1 (name varchar
(32),<...>)"); //
stmt.addBatch ("INSERT INTO table1 VALUES (‚ijk',
101)");
...
stmt.executeBatch();
• Geht auch bei PreparedStatement, dort werden die Parameter
angegeben.
• SQL-Statements müssen einfachen Update- Count zurückliefern
• Nicht erlaubt: SELECT-Statements, die ResultSet zurückliefern
• Batch-Updates optional für JDBC-Treiber → prüfe mit
DatabaseMetaData.supportsBatchUpdates
21. Mai 2002
Dr. Walter Kuhn
Einführung ins Software Engineering - Design und Datenbanken
-56-
28
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
JDBC 2.0 – Updates über Methodenaufrufe
• Vorbedingung
stmt = con.createStatement (
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
• Updates können auch ohne SQL-Anweisungen über das
ResultSet gemacht werden
ResultSet.updateString(int columnIndex, String x)
• Update wird mit updateRow() in die DB geschrieben
• Ähnlich neue Zeilen eingefügen
– ResultSet.moveToInsertRow()
– ResultSet.updateString(...)
– ResultSet.insertRow(); // schreiben!
21. Mai 2002
Einführung ins Software Engineering - Design und Datenbanken
-57-
JDBC Dokumentation
• http://java.sun.com/products/jdk/1.3/docs/guide/jdbc/
• JDBC Seite von Sun. Dort ist auch die JDBC Extension
erhältlich (javax.sql)
– http://java.sun.com/products/jdbc/
• Tutorial von Sun:
– http://java.sun.com/docs/books/tutorial/jdbc/basics/
– http://developer.java.sun.com/developer/Books/JDBCTutorial/
21. Mai 2002
Dr. Walter Kuhn
Einführung ins Software Engineering - Design und Datenbanken
-58-
29
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
Agenda
•
•
•
•
•
Modellbildung ERM
SQL
JDBC
Entity Beans
(Daten als Komponenten)
Web-Server
Web-Client
21. Mai 2002
Servlets
JSP
EJB
Oder
Java Bean
JDBC
DB
Einführung ins Software Engineering - Design und Datenbanken
-59-
EJB
• Also, JDBC war nett aber doch
– Umständlich
– Und Tätigkeiten eigentlich immer wiederkehrend…
– Konsequenz: kann man das automatisieren?
– Antwort: Ja → EJB Entity Beans
21. Mai 2002
Dr. Walter Kuhn
Einführung ins Software Engineering - Design und Datenbanken
-60-
30
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
EJB – Entity Beans
• Repräsentieren persistente Daten und Domain Objects
• Bieten create, find & delete Methoden zum Zugriff auf
Datenbank
• 2 Varianten
– Entity Bean mit Bean managed Persistance. Bean selbst
verantwortlich für Persistenz
– Entity Bean mit Container managed Persistance. Container
wird konfiguriert und kümmert sich dann um Persistenz
• Definition und Konfiguration der persistenten Felder
• Notwendiger Call-Back Routinen definieren
21. Mai 2002
Einführung ins Software Engineering - Design und Datenbanken
-61-
Entity Beans: Beispiel „Account bean“
<<interface>>
javax.rmi.Remote
<<interface>>
javax.ejb.EJBMetaData
<<interface>>
javax.ejb.EJBObject
<<interface>>
javax.ejb.EJBHome
<<interface>>
javax.ejb.EntityBean
<<interface>>
Account
<<interface>>
Account Home
Account Bean
Home Interface
(create,find,..)
Implementierung
Remote Interface
21. Mai 2002
Dr. Walter Kuhn
EJB Framework
Einführung ins Software Engineering - Design und Datenbanken
-62-
31
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
Account-Bean: Home Interface
package com.dilbert;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.FinderException;
public interface AccountHome extends javax.ejb.EJBHome {
public Account create(String id)
throws RemoteException, CreateException;
public Account findByPrimaryKey(int id)
throws RemoteException, FinderException;
public Account findByPrimaryKey(AccountPK pk)
throws FinderException, RemoteException;
// remove() Methoden werden von EJBHome geerbt
}
21. Mai 2002
Einführung ins Software Engineering - Design und Datenbanken
-63-
Account -Bean: Remote Interface
package com.dilbert;
import java.rmi.RemoteException;
public interface Account extends javax.ejb.EJBObject {
public String getName() throws RemoteException;
public void setName(String name) throws
RemoteException;
public double getBalance() throws RemoteException;
public void setBalance(double value) throws
RemoteException;
}
21. Mai 2002
Dr. Walter Kuhn
Einführung ins Software Engineering - Design und Datenbanken
-64-
32
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
Account-Bean: Implementierung (1)
package com.dilbert;
import javax.ejb.EntityContext;
public class AccountBean implements
javax.ejb.EntityBean {
// Deklaration der Container managed fields
// = Zustandsvariable
public int id;
public String name;
public double balance;
// remote interface Implementierung
public String getName(){return name;}
public void setName(String str){name = str;}
public int getBalance(){return balance;}
public void setBalance(double b){balance = b;}
//..
21. Mai 2002
Einführung ins Software Engineering - Design und Datenbanken
-65-
Account Bean: Persistente Felder
• Felder der Bean, die in Datenbank angelegt werden
sollen (persistent), werden in Deployment Descriptor
der Bean genannt und mit Tabellenfeldern assoziiert.
• Alle nicht im Deployment Descriptor genannten Felder
des Beans werden als transient betrachtet.
• Properties: Felder, für die es auch eine Set- und GetMethode gibt
• Primärschlüssel
– Jedes Entitiy Bean benötigt einen serialisierbaren
Primärschlüssel (oder eine eigene Klasse)
– Verwendung: Zugriff auf Zeile in Datenbank
– Ist eine Teilmenge der Bean-Felder
21. Mai 2002
Dr. Walter Kuhn
Einführung ins Software Engineering - Design und Datenbanken
-66-
33
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
Account-Bean: Implementierung (2)
// ejbCreate Methoden
public void ejbCreate(int id){this.id = id;}
public void ejbPostCreate(int id)
// Lebenszyklus der Bean - callback Methoden
public void setEntityContext(EntityContext ctx) { }
public void unsetEntityContext(){}
public void ejbActivate(){}
public void ejbPassivate(){}
public void ejbLoad(){} // Zustandsvariablen wurden
gerade aus DB gelesen
public void ejbStore(){} // Zustandsvariablen
werden gleich in DB geschrieben
public void ejbRemove(){} // Bean & Datensatz
werden gleich gelöscht
}
21. Mai 2002
Einführung ins Software Engineering - Design und Datenbanken
-67-
Account Bean: EJBCreate Methoden
•
jede create(...) Methode im AccountHome Interface korrespondiert zu einer
ejbCreate(...) Methode in der AccountBean Klasse.
•
ejbPostCreate(...) Methoden werden automatisch nach Beendigung der
entsprechenden ejbCreate(...) Methode aufgerufen.
•
ejbCreate(...) & ejbPostCreate(...) werfen keine Ausnahmen. Der Container
kümmert sich darum, wenn Probleme auftauchen.
findByPrimaryKey(...) wird nicht bei container-managed bean Klassen
implementiert (unser Beispiel beinhaltet diese, um den Mechanismus generell
aufzuzeigen)
ejbPassivate() & ejbActivate() werden vom Container genutzt, während
Beans (temporär) aus dem Speicher bzw. wieder geholt werden, hier können
geeignete Bereinigungsmechanismen/Instanziierungsmechanismen genutzt
werden
– „Mapping“ und Aufruf erfolgt durch EJB-Container
– Damit können beliebige Zusatz-Aufgaben erledigt werden.
•
•
21. Mai 2002
Dr. Walter Kuhn
Einführung ins Software Engineering - Design und Datenbanken
-68-
34
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
Lebenszyklus einer Bean
Does Not Exist
unsetEntityContext()
finalize()
Class.newInstance()
setEntityContext()
client
initialized
Pooled
ejbPassivate()
create()
ejbCreate()
ejbPostCreate()
remove()
ejbRemove()
Ready
client
initialized
21. Mai 2002
ejbActivate()
ejbLoad()
business
method
ejbStore()
Einführung ins Software Engineering - Design und Datenbanken
-69-
Account-Bean: Primärschlüsselklasse
package com.dilbert;
public class AccountPK implements java.io.Serializable {
// Einfache Version, hier wäre Komplexes möglich
// Schlüsselfelder - Untermenge der Felder der Bean
public int id; // finde damit den Eintrag
// Spezialisierte Hash- und Vergleichsmethoden, da
// die Schlüsselwerte und nicht die Java-Objekte
// gehasht bzw. verglichen werden sollen.
public int hashCode() { return id.hashCode(); }
public boolean equals(Object obj) {
return (
obj instanceOf AccountPK) &&
id.equals(((AccountPK)obj).id );
}
}
21. Mai 2002
Dr. Walter Kuhn
Einführung ins Software Engineering - Design und Datenbanken
-70-
35
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
Account Bean: Deployment Descriptor
•
•
•
•
Nennt die Klassen, die ein Bean ergeben
Beschreibt, wie Bean zur Laufzeit vom Container behandelt wird
Zum Zeitpunkt der Definition des Beans erstellt (und serialisiert)
Zum Zeitpunkt des Deployments im Container genutzt (dort
deserialisiert)
• Die (im Container noch veränderbare) Information wird genutzt., die
Infrastruktur des Beans aufzusetzen
– Füge das Bean dem Naming Serivce hinzu
– Erzeuge das EJB Objekt und das EJB Home Objekt
– Erzeuge notwendige DB-Persistenz-Infrastruktur
– Erzeuge notwendige Infrastruktur für Transaktionen
• Bem.: DeploymentDescriptor ist eine Klasse, die auch
programmtechnisch erzeugt werden kann. Siehe javax.ejb.deployment
(DeploymentDescriptor, ControlDescriptor, EntityDescriptor,
SessionDescriptor)
21. Mai 2002
Einführung ins Software Engineering - Design und Datenbanken
-71-
Artikel-Bean:
Deployment Descriptor
<?xml version="1.0"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise
JavaBeans 1.1//EN" "http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd">
<ejb-jar>
<enterprise-beans> <entity>
<description>Bean für Account-Stammdaten</description>
<ejb-name>Account</ejb-name>
<home>com.dilbert.AccountHome</home>
<remote>com.dilbert.Account</remote>
<ejb-class>com.dilbert.AccountBean</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>com.dilbert.AccountPK</prim-key-class>
<reentrant>False</reentrant>
<cmp-field> <field-name>id</field-name> </cmp-field>
<cmp-field> <field-name>name</field-name> </cmp-field>
Persistenz
<cmp-field> <field-name>balance</field-name> </cmp-field>
</entity> </enterprise-beans>
21. Mai 2002
Dr. Walter Kuhn
Einführung ins Software Engineering - Design und Datenbanken
-72-
36
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
Artikel-Bean: Deployment Descriptor (2)
<assembly-descriptor>
<security-role>
<description>Benutzer mit Vollzugriff</description>
<role-name>Vollzugriff</role-name>
</security-role>
<method-permission>
<role-name>Vollzugriff</role-name>
<method>
<ejb-name>Account</ejb-name>
<method-name>*</method-name>
</method>
</method-permission>
<container-transaction>
<method>
<ejb-name>Account</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>
21. Mai 2002
Sicherheit
Transaktionales
Verhalten
Einführung ins Software Engineering - Design und Datenbanken
-73-
Agenda
•
•
•
•
•
Modellbildung ERM
SQL
JDBC
Entity Beans
(Daten als Komponenten)
Web-Server
Web-Client
21. Mai 2002
Dr. Walter Kuhn
Servlets
JSP
EJB
Oder
Java Bean
JDBC
Einführung ins Software Engineering - Design und Datenbanken
DB
-74-
37
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
Daten als Komponenten (hier nur als Hinweis)
Wollen wir hier aus Zeitgründen nicht vertiefen
• XML – DTD und XML Schemata
– Wohldefinierte, selbstbeschreibende Strukturen
– Gremien, die Entities (und z.T. auch Geschäftsprozesse!) für
Geschäftszwecke standardisieren, z.B. ebXML.org, xml.org,
rosettanet.org
• Java J2EE Entitiy Beans (die haben wir aufgezeigt)
• Java Data Objects (transparente Mechanismen für
Persistenz)
• ..
21. Mai 2002
Einführung ins Software Engineering - Design und Datenbanken
-75-
Beispiel XML Datenobjekte
• unterliegen einer spezifischen „DTD“
• sind wohldefiniert („Klammerung“)
<Kunde>
<Rechnung>
<Adresse>
Meine Adresse
</Adresse>
</Rechnung>
</Kunde>
• können von beliebigen Sprachen bearbeitet, verschickt
und auch in Datenbanken abgefüllt werden
21. Mai 2002
Dr. Walter Kuhn
Einführung ins Software Engineering - Design und Datenbanken
-76-
38
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
Literatur
•
Gute Einführung in SQL und ERM: eine Legion an Büchern
– Kevin Kline, Daniel Kline: SQL in a Nutshell, Januar 2001, O'Reilly
– Gottfried Vossen: Datenbankmodelle, Datenbanksprachen und
Datenbankmanagementsysteme. 4., korr. u. erg. Aufl. Ausgabe (2000) , Oldenbourg
– Andreas Meier: Relationale Datenbanken. Leitfaden für die Praxis, 4., überarb. u.
erw. Aufl. 2001 Ausgabe, Springer Verlag
– J. Melton, A. R. Simon, J. Gray: „SQL: 1999 - Understanding Relational Language
Components“, Morgan Kaufman Publishers, 2001
– Sönke Cordts: Datenbankkonzepte in der Praxis. Nach dem Standard SQL-99, 15.
Januar 2002, Addison-Wesley
– Gunter Saake, Kai-Uwe Sattler: Datenbanken und Java. JDBC, SQLJ und ODMG,
2000, dpunkt-Verlag
– http://dx1.hrz.uni-dortmund.de:8001/doc1/hrz/sqlref/sqloracle.html
•
Einführung in MYSQL, (lokal siehe auch Server IFI) „MySQL
Datenbankhandbuch“
– http://www.little-idiot.de/mysql/
– Michael Kofler: MySQL. Einführung, Programmierung, Referenz. 3. Aufl., 15. März
2001, Addison-Wesley
•
•
JDBC Treiber von MySQL: http://mmmysql.sourceforge.net/
EJB: siehe letzte Woche
21. Mai 2002
Einführung ins Software Engineering - Design und Datenbanken
-77-
Hinweise fürs Praktikum
• DB - MySQL
• Aufgabe
21. Mai 2002
Dr. Walter Kuhn
Einführung ins Software Engineering - Design und Datenbanken
-78-
39
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
MySQL
• Frei verfügbares, schnelles DBMS
– www.mysql.com
– Beratung und kommerzielle Implementierung ebenfalls verfügbar
• MySQL orientiert sich am Standard von SQL-2 – jedoch keine
vollständige Implementierung.
– Z.Zt. fehlen Transaktionen, verschachtelte select-Anweisungen, select
into table, Trigger, Fremdschlüssel und virtuelle Tabellen (Views).
• Spezielle Implementierung bei MySQL „InnoDB“ unterstützt Transaktionen
– Bei einigen nicht unterstützten Konstrukten wird zwar die Syntax der
entsprechenden Anweisungen akzeptiert, sie aber im weiteren ignoriert
(z.B. bei der Spezifikation von Fremdschlüsseln und weiterer Indizes).
– MySQL unterstützt nicht das Rechtevergabesystem von SQL-2, sondern
ein eigenes, das im Prinzip sehr viel eleganter ist, da es auf Tabellen und
damit normalen Datenbankmechanismen beruht.
– Einige dieser Einschränkungen haben den Vorteil, daß MySQL deutlich
schneller ist als traditionelle Datenbanken.
• Für konkrete Details wird auf MySQL Literatur verwiesen
21. Mai 2002
Einführung ins Software Engineering - Design und Datenbanken
-79-
MySQL – Nutzung – wichtigste Tools
• mysqld
– SQL daemon. Basis für Nutzung – zuerst starten, dann laufen lassen
• mysqlshow
– Information über DB, Tabellen, Spalten, Indizes
• mysql_install_db
– Erzeugt (einmalig bei Install.) das MySQL Rechte-System mit Defaults
• mysqladmin
– Administratives: Erzeugen, Löschen von Datenbanken, Statusinformation, ..
– mysqladmin create mydatabase
– Alternativ ein GUI dazu verwenden (winmysqladmin – empfohlen)
• mysql
– Interaktive Commandline-Utility. Gut für den Einstieg!
– Kann auch nicht-interaktiv genutzt werden
mysql database < script.sql > output.tab
• JDBC Treiber: http://mmmysql.sourceforge.net/
21. Mai 2002
Dr. Walter Kuhn
Einführung ins Software Engineering - Design und Datenbanken
-80-
40
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
MySQL – Ein Beispiel
Shell> mysqld
// Dämon, unter Unix
// DB-Client starten
Shell> mysql -h host -u user -p
// passwort wird gefragt
mysql> SELECT VERSION(), CURRENT_DATE;
mysql> SHOW DATABASES;
mysql> CREATE DATABASE petDB;
mysql> USE petDB;
mysql> SHOW TABLES; // sollte nix da sein
mysql> CREATE TABLE pet (name VARCHAR(20), owner
VARCHAR(20), species VARCHAR(20), sex CHAR(1), birth
DATE, death DATE);
mysql> DESCRIBE pet;
mysql> INSERT INTO pet VALUES
('Puffball','Diane','hamster','f','1999-03-30', NULL);
mysql> SELECT * FROM pet;
//Hinweis: wenn Kommando nicht mit „;“ endet, dies unbedingt
tun. Bei mehrzeiligen Eingaben auf der letzten Zeile
21. Mai 2002
Einführung ins Software Engineering - Design und Datenbanken
-81-
MySQL Laden / Saven
• Zum Laden und Saven von größeren Datenblöcken gibt es meist
spezielle Operationen.
• MySQL: ASCII-file Konversion mit
SELECT .. INTO OUTFILE '<filename>' ..
und umgekehrt mit
LOAD DATA [LOCAL] INFILE '<filename>' INTO TABLE
<tablename>
• Beispiel
SELECT * INTO OUTFILE '/tmp/testfile_m.txt' FROM
orte;
CREATE TABLE city (plz int, oname varchar(25));
LOAD DATA INFILE '/tmp/testfile_m.txt' INTO TABLE
city;
21. Mai 2002
Dr. Walter Kuhn
Einführung ins Software Engineering - Design und Datenbanken
-82-
41
Einführung ins Software Engineering Design und Datenbanken
21. Mai 2002
MySQL unterstützte Datentypen
•
Einige Beispiele (aus dem Manual), ansonsten -> „manual.htm“
– M = Maximum Display Size (max 255), D Numer of Digits after „.“, max 30
• INT[(M)] [UNSIGNED] [ZEROFILL]
– A normal-size integer. The signed range is -2147483648 to 2147483647. The unsigned
range is 0 to 4294967295.
• DOUBLE[(M,D)] [ZEROFILL]
– A normal-size (double-precision) floating-point number. Cannot be unsigned. Allowable
values are -1.7976931348623157E+308 to -2.2250738585072014E-308, 0, and
2.2250738585072014E-308 to 1.7976931348623157E+308. The M is the display width and
D is the number of decimals. DOUBLE without an argument or FLOAT(X) where 25 <= X
<= 53 stands for a double-precision floating-point number.
• DATETIME
– A date and time combination. The supported range is '1000-01-01 00:00:00' to '9999-12-31
23:59:59'. MySQL displays DATETIME values in 'YYYY-MM-DD HH:MM:SS' format,
but allows you to assign values to DATETIME columns using either strings or numbers.
• BIT, BOOL, CHAR
– These three are synonyms for CHAR(1).
• [NATIONAL] VARCHAR(M) [BINARY]
– A variable-length string. NOTE: Trailing spaces are removed when the value is stored (this
differs from the ANSI SQL specification). The range of M is 1 to 255 characters.
VARCHAR values are sorted and compared in case-insensitive fashion unless the
BINARY keyword is given.
21. Mai 2002
Einführung ins Software Engineering - Design und Datenbanken
-83-
Übung
• Nun nach dem GUI und der Business Logik unserer
Bank die entsprechende Datenhaltung realisieren
– Wahlweise einfacher JDBC Zugriff (empfohlen)
– Oder für Mutige EJBs (Sven fragen – JBoss)
– DB: MySQL
Web-Server
Web-Client
21. Mai 2002
Dr. Walter Kuhn
Servlets
JSP
Java Bean
Oder EJB
JDBC
Einführung ins Software Engineering - Design und Datenbanken
DB
-84-
42
Herunterladen