Datenbankpraktikum - IFIS Uni Lübeck

Werbung
Prof. Dr. V. Linnemann
D. Kukulenz
Universität zu Lübeck
Institut für Informationssysteme
Lübeck, den 18. April 2005
Datenbankpraktikum
Sommersemester 2005
2. Übungsblatt
Aufgabe 1: HSQLDB
Laden Sie das relationale Datenbank-Management System HSQL aus dem Internet herunter (http://hsqldb.sourceforge.net/, z.B. Version 1.7.3) und entpacken Sie die ZIP-Datei
auf Ihre Festplatte. Bitte stellen Sie diese Dateien nicht unter die Kontrolle des CVS (d.h.
es ist keine Kopie auf dem Praktikumsserver erwünscht). Erweitern Sie die Systemvariable
CLASSPATH um das aktuelle Verzeichnis (.) und die beiden jar-Dateien, die im Ordner
lib von HSQL liegen. Stellen Sie sicher, dass der CLASSPATH für alle Konsolen, die Sie
nutzen, gesetzt ist.
Machen Sie sich mit der Dokumentation von HSQL vertraut, die Sie im Ordner doc finden.
Öffnen Sie die Konsole und starten Sie den HSQL Datenbank-Server durch den Aufruf von
java org.hsqldb.Server
Starten Sie jetzt aus einer anderen Konsole heraus die grafische Oberfläche von HSQL
durch den Aufruf von
java org.hsqldb.util.DatabaseManager
Verbinden Sie sich mit dem Datenbank-Server, indem Sie aus der Liste Type den Eintrag
HSQL Database Engine Server wählen. Klicken Sie im Menü Options auf Insert Test Data,
um Beispieltabellen mit Inhalt einzufügen.
Stellen Sie eine Anfrage an die Tabelle CUSTOMER, die die Wohnorte der Kunden
zurückliefert, deren Nachname ’Ott’ ist. Geben Sie sowohl die Anfrage in korrekter
SQL Syntax als auch das Ergebnis an.
Speichern Sie diese Daten im Text-Format in einem Verzeichnis v/dbp/texte/blatt2/
in Ihrer lokalen CVS-Arbeitskopie und checken Sie sie (z.B. mit Eclipse) ein.
1/3
Aufgabe 2: Benutzer- und Gruppenmanagement
Group
contains
User
M:N
name
description
username
password
fullname
description
• Definieren Sie zu dem ER-Diagramm geeignete Relationen (Tabellen). Wählen Sie
geeignete Spaltentypen. Geben Sie die SQL-Create-Statements an.
Speichern Sie diese Daten im Text-Format in einem Verzeichnis v/dbp/texte/blatt2/
und checken Sie sie (z.B. mit Eclipse) ein.
• Die Entitäten User und Group werden durch die beiden Schnittstellen
dbp.common.UserIF und dbp.common.GroupIF wie folgt modelliert.
1
2
package dbp . common ;
import j a v a . u t i l . L i s t ;
3
4
5
6
public i n t e r f a c e UserIF {
public S t r i n g getUserName ( ) ;
public void setUserName ( S t r i n g name ) ;
7
public S t r i n g getFullName ( ) ;
public void setFullName ( S t r i n g name ) ;
8
9
10
public S t r i n g g e t D e s c r i p t i o n ( ) ;
public void s e t D e s c r i p t i o n ( S t r i n g d e s c ) ;
11
12
13
public L i s t getGroups ( ) ;
public void addToGroup ( GroupIF group ) ;
public void removeFromGroup ( GroupIF group ) ;
14
15
16
17
1
2
}
package dbp . common ;
import j a v a . u t i l . L i s t ;
3
4
5
6
public i n t e r f a c e GroupIF {
public S t r i n g getName ( ) ;
public void setName ( S t r i n g name ) ;
2/3
7
public S t r i n g g e t D e s c r i p t i o n ( ) ;
public void s e t D e s c r i p t i o n ( S t r i n g d e s c ) ;
8
9
10
11
public L i s t g e t U s e r s ( ) ;
public void addUser ( UserIF u s e r ) ;
public void removeUser ( UserIF u s e r ) ;
12
13
14
15
}
Erstellen Sie die Klassen User und Group, die die o.a. Schnittstellen implementieren.
Organisieren Sie Ihre Klassen in Packages; der Name aller Packages beginnt mit dbp.
Die Klassen User und Group sollen zum Package dbp.model gehören.
• Erstellen Sie eine Klasse dbp.database.DataManager, welche überJDBC mit der
obigen Datenbank kommuniziert und Basisfunktionalitäten zum Speichern, Laden,
Verändern und Löschen von Benutzern und Gruppen ermöglicht. Beim Laden eines
Objekts sollen die referenzierten Objekte nicht sofort mitgeladen werden. Das bedeutet z.B., dass wenn eine Gruppe geladen wird, die enthaltenen Benutzer nicht mit
geladen werden. Erst beim Aufruf von getUsers werden diese nachgeladen.
Die Klasse DataManager soll eine Singleton sein, da zur Laufzeit nur maximal eine
Instanz der Klasse existieren darf. Das Erzeugen dieser Instanz soll nur über den
Aufruf einer getInstance-Methode möglich sein.
Abgabetermin: Montag, der 25.4.2005
3/3
Herunterladen