Inhalt In Java gibt es mehrere Klassenbibliothek-Pakete, die Datenstrukturen und Operationen für die grafische Darstellung von Fenstern und Benutzerinteraktionen erlauben (wie Sie es gewohnt sind)
Vorlesung Informatik II Universität Augsburg Sommersemester 2011
In diesem Kapitel werden wir besprechen: Grundlagen des Pakets java.awt Einfach(st)e Anbindung von Fenstern an Datenklassen
Prof. Dr. Robert Lorenz
Später: Grafische Benutzerschnittstelle und Schichtenarchitektur Paket java.swing
Lehrprofessur für Informatik 07. Java: GUI und Ereignisbehandlung – Teil 1
1
Exkurs: GUI-Elemente
2
Exkurs: GUI-Elemente
Grundbegriffe
Grundbegriffe
Dialog Fenster zur Interaktion mit dem Benutzer
Dialog Fenster zur Interaktion mit dem Benutzer
Primärdialog: zur direkten Aufgabenerfüllung z.B. Editor
modaler Dialog muss beendet werden vor Aktivierung eines anderen Fensters z.B. Speichern unter, Mitteilungen
Sekundärdialog: für situationsabhängige zusätzliche Informationen wird aus Primärdialog gestartet nach Beendigung wird Primärdialog fortgesetzt z.B. Drucken, Speichern unter, Formeln einfügen, Suchen ...
nicht modaler Dialog kann unterbrochen werden z.B. Suchen
3
4
Inhalt
Fenster
Später: Vorgehen zum systematischen Konstruieren der GUI zu vorgegebenen Datenklassen (Erfassungsfenster, Listenfenster, Dialogführung)
Ein leeres Fenster (Klasse Frame) import java.awt.*;//Import aller Klassen des Pakets public class Test { public static void main (String args[]){ Frame F=new Frame(); F.setSize(300,300);//Breite und Höhe in Pixeln F.setVisible(true);//sichtbar machen } }
Jetzt: Vereinfachte Anbindung von Fensterklassen an Datenklassen Zugriff auf Daten von Objekten einer Klasse Zugriff auf Beziehungen zwischen Objekten
5
Fenster
6
Fenster
Besser: Entkoppelung der Programmklasse + eigene Fensterklasse als Spezialisierung
Besser: Entkoppelung der Programmklasse + eigene Fensterklasse als Spezialisierung public class MeinProgrammGUI extends Frame { public MeinProgrammGUI (){ super();//Konstruktoraufruf von Frame (opional) setSize(300,300); setVisible(true); } } public class meinProgramm { public static void main (String args[]){ new MeinProgrammGUI();//Anonymes Objekt erzeugen } }
+ Frame
+ MeinProgrammGUI Benutze Konstruktor zur Darstellung des Fensters 7
8
Fenster - Vererbungshierarchie
Fenster
Object
Ausgewählte Klassen und Operationen: Component (Graphische Benutzerschnittstelle)
Frame: Fenster mit Titel void setMenuBar(MenuBar b): Menubar b hinzufügen
Container (kann andere Komponenten enthalten)
MenuBar: Leiste, um Menüs aufzunehmen Menu add(Menu m): Menu hinzufügen
Panel (für Fensterkomponenten)
Window (Primärfenster ohne Rand)
Menu: Menü mit Titel, das verschiedene Menüpunkte enthalten kann MenuItem add(MenuItem i): Menüpunkt hinzufügen
Frame (mit Rand und Titel)
MenuItem: Menüpunkt mit Titel, um Aktionen auszuführen oder Optionen zu setzen oder andere Menüs aufzunehmen (zum Ausklappen)
Dialog (für Dialoge)
9
Fenster
10
Fenster BorderLayout:
Ausgewählte Klassen und Operationen: Frame void setLayout(LayoutManager l): Komponenten durch Layout organisieren Component add(...): Komponenten gemäß Layout hinzufügen
North
West
LayoutManager: Schnittstelle zur Festlegung der Darstellung von Komponenten innerhalb eines Containers BorderLayout: siehe nächste Folie FlowLayout: von links nach rechts (horizontal) fließend Gridlayout: wie Gitter/Tabelle
Center
East
South
Label: Komponente zur Darstellung von Text
11
12
Fenster
Fenster
Ausgewählte Klassen und Operationen:
Ausgewählte Klassen und Operationen:
Panel: Komponente zur Aufnahme weiterer Komponenten nach Layout Voreinstellung: FlowLayout Component add(...): Komponenten gemäß Layout hinzufügen
Frame void setLocation(int x, int y): Linke obere Ecke des Frames void setVisible(true): Frame sichtbar machen void pack(): Optimale Größe zur Darstellung aller Komponenten setzen
Button: Schaltfläche mit Titel, um Aktionen auszuführen
Dialog: Fenster mit Titel zur Darstellung von Dialogen zu einem Frame oder zu einem anderen Dialog modal oder nicht modal Operationen ähnlich wie bei Frame
PopupMenu: über Rechtsmausklick erreichbares Menu wird einer Komponente zugeordnet
13
Fenster
14
Fenster
Ausgewählte Klassen und Operationen:
Ausgewählte Klassen und Operationen:
TextField: Zur Eingabe von Text (einzeilig) String getText(): Eingegebenen Text auslesen void setText(String text): Text setzen
TextArea: Zur Eingabe von Text (mehrzeilig, mit Scrollbar) ähnlich zu TextField
Choice: Ausklappbare Liste von Strings zur Auswahl unter verschiedenen Unterpunkten (Einfach- oder Mehrfachauswahl) void add(String titel): Unterpunkt hinzufügen void select(String titel): Unterpunkt auswählen String getSelectedItem(): Ausgewählten Unterpunkt zurückgeben
15
List: Liste von Strings zur Auswahl unter verschiedenen Unterpunkten (ähnlich zu Choice) void dd(String text): Unterpunkt hinzufügen void remove(String text): Unterpunkt entfernen void removeAll(): alle Unterpunkte entfernenntfernen
16
Fenster
Fenster
Anwendungsfenster
Dialogfenster (vereinfacht, exemplarisch)
Sinnvolle Komponenten: Button close: Schließen des Fensters Menu bearbeiten: Öffnen von Dialogen zur Bearbeitung von Daten PopupMenu bearbeitenPm: dasselbe als Popupmenu
Anbinden von Dialogfenstern an Datenklassen zur Bearbeitung von Daten: Erstellen von Daten Anzeigen von Daten Modifizieren von Daten Löschen von Daten
Komponenten mit Hilfe von Panels organisieren Binde an jede Datenklasse MeineKlasse und ihre Containerklasse ein Dialogfenster MeineKlasseGUI an
Layout hinzufügen
17
Fenster
18
Fenster
Dialogfenster (vereinfacht, exemplarisch)
Dialogfenster (vereinfacht, exemplarisch)
+ Dialog
+ MeineKlasseGUI + MeineKlasseGUI() ... + save() + update() + load()
+ MeineKlasseGUI 0..* 0..1 subject
+ MeineKlasse
0..* container 1..1
Eingegebene Daten an subject übergeben Liste aller Objekte in container neu anzeigen Objektdaten von subject laden
+ MeineKlasseContainer
19
20
Fenster
Fenster
Dialogfenster (vereinfacht, exemplarisch)
Dialogfenster (vereinfacht, exemplarisch)
Mit passenden grafischen Komponenten zum Eingeben und Anzeigen aller Attributwerte:
Benutze Konstruktor zum Initialisieren aller grafischer Komponenten
Einwertiges Attribut: TextField Aufzählungs-Attribut: Choice Mehrwertiges Attribut: List
Sollten grafische Komponenten Attribute der Fensterklasse sein? Nur diejenigen zur Aufnahme von Attributwerten (Textfelder,...) sonst: lokale Variablen im Konstruktor (Schaltflächen,...)
Mit grafischer Komponente zum Anzeigen und Auswählen von erzeugten Objekten: List
21
Fenster
22
Fenster
Dialogfenster (vereinfacht, exemplarisch)
Dialogfenster (vereinfacht, exemplarisch):
Mit Schaltflächen / Menüpunkten zum Ausführen obiger Aktionen und zugehörigen Operationen
Attribute: Referenzattribute & Grafische Komponenten zur Aufnahme von Attributwerten public class MeinKlasseGUI extends Dialog {
keine üblichen Verwaltungsoperationen für die Attribute und Beziehungen (überflüssig)
private MeineKlasse subject;//Referenz Datenobjekt private MeineKlasseContainer container;//Referenz Container private TextField meinAttribut;//Ausgabe Attribut Datenobjekt ... private List alleObjekte;//Ausgabe aller Datenobjekte ...
23
24
Fenster
Fenster
Dialogfenster (vereinfacht, exemplarisch):
Dialogfenster (vereinfacht, exemplarisch):
Konstruktor: Fensteraufbau & Initialisierungen
Operation save(): Auslesen der Werte aus den grafischen Komponenten und Erzeugen eines neuen Objekts mit diesen Werten
public MeinKlasseGUI(Frame f){ super(f,“Objekte verwalten“,false);//Frame-Konstruktor setLayout(new GridLayout(0,1));//eine Spalte,beliebig viele Zeilen Panel p = new Panel(); meinAttribut = new TextField(20); p.add(meinAttribut); Button speichern = new Button(“Speichern"); p.add(speichern); add(p); container = MeineKlasseContainer.instance(); subject = null;//Initialisierung der Referenzen pack(); setVisible(true); }
public void save(){ subject = new MeineKlasse(...); subject.setMeinAttribut(meinAttribut.getText()); ... }
25
Fenster
26
Fenster
Dialogfenster (vereinfacht, exemplarisch):
Dialogfenster (vereinfacht, exemplarisch):
Operation update(): Löschen aller dargestellten Listenelemente und neu Laden aus dem Container
Operation load(): Laden der Werte eines aus der Liste selektierten Objekts
public void update(){ alleObjekte.removeAll(); for(MeineKlasse o:container){ alleObjekte.add(o.toString()); } }
if (alleObjekte.getSelectedItem() != null){ Iterator it = container.iterator(); while (it.hasNext()){ MeineKlasse o = it.next(); String auswahl = alleObjekte.getSelectedItem(); if (o.toString().equals(auswahl)){ subject = o;} } ... meinAttribut.setText(subject.getMeinAttribut()); ... 27
28
Ereignisbehandlung
Ereignisbehandlung
Noch können wir nichts mit dem Fenster anfangen
Benutzeraktionen lösen sog. Ereignisse (Events) aus:
Es lässt sich nicht schließen Dialogfenster lassen sich nicht öffnen Keine Reaktion auf Drücken von Schaltflächen
Klicken auf Schaltfläche: ActionEvent Klicken mit der Maus auf Komponenten: MouseEvent Betätigen von Keyboardtasten: KeyEvent Betätigen von Fensterfunktionen: WindowEvent …
Es fehlt noch die sogenannte Ereignisbehandlung
Events sind Java-Objekte, die Informationen über Benutzeraktionen kapseln Die Eventklassen bilden eine Vererbungshierarchie (siehe API)
29
Ereignisbehandlung
Ereignisbehandlung Objekte, die auf Benutzeraktionen reagieren sollen (z.B. Fenster), müssen diese Ereignisse abhören können
AWTEvent
ActionEvent
AdjustmentEvent
ConzainerEvent
ComponentEvent
InputEvent
FocusEvent
30
TextEvent
Man kann ereignisempfangende Objekte (Fenster) bei ereignisauslösenden Objekten (Button) als Ereignisabhörer (EventListener) registrieren
WindowEvent
EventListener ist eine Schnittstelle, die festlegt, mit welchen Operationen auf ein Ereignis regiert werden kann
PaintEvent KeyEvent
Für jede Ereignisart gibt es eine eigene EventListenerSchnittstelle (ActionListener, MouseListener, …)
MouseEvent
31
32
Ereignisbehandlung
Ereignisbehandlung
Für die Ausführung von Benutzeraktionen zuständige Klassen (ereignisempfangende Klassen) müssen die entsprechende EventListener-Schnittstelle implementieren EventListener
Für die Ausführung von Benutzeraktionen zuständige Klassen (ereignisempfangende Klassen) müssen die entsprechende EventListener-Schnittstelle implementieren
addEventListener() removeEventListener()
Ereignisauslösende Objekte benachrichtigen alle bei ihr registrierten Ereignisabhörer … ... durch Aufruf der zum Ereignis gehörenden Operation der Ereignisabhörer-Schnittstelle
EventObject
getSource() ... 33
Ereignisbehandlung
Ereignisbehandlung
Beispiel: ActionEvent, ActionListener (Buttons) ActionListener actionPerformed()
MeinFenster actionPerformed()
34
Beispiel: ActionEvent, ActionListener (Button close) public class meinFenster extends Frame implements ActionListener{ public meinFenster(){ ... Button close = new Button(“close“); add(close); close.addActionListener(this);//Fenster bei Button anmelden ... } public void actionPerformed(ActionEvent e){ if (e.getActionCommand().equals("close")){ dispose();//Fenster schließen System.exit(0);//Anwendungsresourcen freigeben } } }
Button addActionListener() removeActionListener()
ActionEvent getActionCommand() ... 35
36
Ereignisbehandlung
Ereignisbehandlung
Beispiel: WindowEvent, WindowListener (Fenster)
Beispiel: WindowAdapter (mit leeren Implementierungen) WindowAdapter
WindowListener windowClosing() windowClosed() windowOpened() windowActivated()
windowClosing() windowClosed() windowOpened() windowActivated()
MeinFenster addWindowListener() removeWindowListener()
WindowEventHandler
WindowEvent MeinFenster ...
windowClosing()
getWindow() ...
WindowListener MeinFenster addWindowListener() removeWindowListener()
WindowEvent getWindow() ...
37
Ereignisbehandlung
38
Ereignisbehandlung
Beispiel: WindowAdapter (mit leeren Implementierungen)
Beispiel: WindowAdapter (als anonymes Objekt)
public class MeinWindowEventHandler extends WindowAdapter{ MeinFenster f; MeinWindowEventHandler(MeinFenster f) { this.f = f; } public void windowClosing(WindowEvent e){ f.dispose(); System.exit(0); } } public class meinFenster extends Frame { public meinFenster() { ... MeinWindowEventHandler w = new MeinWindowEventHandler(this); addWindowListener(w); ) }
public class meinFenster extends Frame { public meinFenster() { ... addWindowListener(new WindowAdapter{ public void windowClosing(WindowEvent e){ dispose(); System.exit(0); } }); }
39
40
Ereignisbehandlung
Ereignisbehandlung
Event-Klasse
Interface
Methoden
Ereignis- Quellen
Event-Klasse
Interface
Methoden
Ereignis- Quellen
ActionEvent
ActionListener
actionPerformed()
Button MenuItem TextField
MouseEvent
MouseListener
Component
AdjustmentEvent
AdjustementListener
adjustmentValueChanged() Scrollbar
mouseClicked() mouseEntered() mouseExited() mousePressed() mouseReleased()
ItemEvent
ItemListener
itemStateChanged()
KeyEvent
KeyListener
keyPressed() keyReleased() keyTyped()
Checkbox CheckboxMenuItem Choice List
MouseMotionListener mouseDragged() mouseMoved() WindowEvent
WindowListener
Component
Component
windowActivated() Window windowClosed() windowClosing() windowDeactivated() windowDeiconified() windowIconified() windowOpened()
41
42
Motivation Datenbanksysteme als Basis moderner Softwaresysteme
Vorlesung Informatik II
Web-basierte Systeme (eBay, Amazon, Expedia, OnlineBanking)
Universität Augsburg
Unternehmensinformationssysteme(SAP R/3,...)
Sommersemester 2011
Prof. Dr. Robert Lorenz
Grundlage vieler Informatik-Berufe Administration, Planung/Entwurf, Entwicklung, Nutzung
Lehrprofessur für Informatik 08. Exkurs: Datenbanken
1
2
Motivation
Traditionelle Datenverwaltung
Hohe Herausforderungen Verwaltung von Daten im Terabyte-Bereich (1 TB = 1000 GB) Viele Nutzer, parallele Anfragen, hohe Verfügbarkeit, Sicherheit, Konsistenz
Physische Datenabhängigkeit Änderungen an der Struktur der Daten führen zu Änderungen der Anwendungsprogramme. Anwendungsprogramme müssen Struktur der Daten kennen Datenredundanz/-inkonsistenz Anwendungsprogramme/Benutzer haben spezielle Erfordernisse bzgl. der Daten: Dieselben Daten werden in verschiedenen Versionen mehrfach abgespeichert. Änderungen der Daten können zu Inkonsistenzen zwischen verschiedenen Versionen führen.
Querbezüge zu anderen Informatikbereichen Modellierung, Datenstrukturen, Sicherheit, Theorie, Betriebssysteme, …
3
Traditionelle Datenverwaltung
4
Datenbanksysteme (DBS)
Einbenutzerbetrieb Auf eine Datei kann nur ein Anwendungsprogramm auf einmal zugreifen.
Löse Aufgaben der Beschreibung, des Abspeicherns und des Zugriffs auf Daten aus den Anwendungsprogrammen heraus. Programme
Folgerungen: hohe Kosten für die Anpassung von Anwendungsprogrammen
Benutzergruppen
DBMS (Datenbankmanagementsystem): Verarbeitung von Anfragen, Zugriff auf gespeicherte Daten
Unsicherheit bzgl. der Korrektheit der Daten Effizienzverlust bei Speicherung und Zugriff auf Daten DD (Data Dictionary)
DB (Daten bank)
...
DB (Daten bank)
DBS (Datenbanksystem) 5
6
DBS
DBS
Datenbankmanagementsystem (DBMS) Softwaresystem, das die Definition, Konstruktion (Speichern) und Manipulation (Anfragen, Änderungen, Berichte) von Daten unterstützt.
Eigenschaften
Datenbank Menge der von einem DBMS verwalteten Daten. Sie beschreibt einen wohldefinierten Ausschnitt der realen Welt (Miniwelt).
Integrierte Datenspeicherung für verschiedene Anwendungen: Unterstützung von Sichten/Views
Data Dictionary/Datenbankschema (DD) Legt die Struktur der Daten fest (bzgl. eines Datenmodells).
Redundanz- und Konsistenzkontrolle Datenunabhängigkeit: einheitliche Zugriffs-Schnittstelle auf Daten Schnelle Verarbeitung von DB-Operationen
Mehrbenutzerbetrieb: Unterstützung von Transaktionen und Nebenläufigkeitskontrolle Datensicherheit: Zugriffsverwaltung Datenunversehrtheit: Datenwiederherstellung/Recovery
7
DBS
8
Relationales Datenmodell
Kriterien für den Einsatz von DBS
Jedem DBS liegt ein Datenmodell zugrunde:
Es handelt sich um sehr große Datenmengen
Eigenschaften der Datenelemente Struktur der Datenelemente Konsistenzbedingungen Operationen zum Speichern, Suchen, Ändern Löschen
Datenverlust (nach technischen Fehlern) soll ausgeschlossen werden
Das am meisten verwendete Datenmodell ist das relationale Datenmodell
Anwendungen und Datenstrukturen sind Änderungen unterworfen Mehrere Benutzer/Anwendungen greifen parallel auf die Daten zu
Zugriffsverwaltung ist notwendig
Jetzt: Informale Einführung in dieses Datenmodell anhand von Beispielen
9
10
Relationales Datenmodell
Relationales Datenmodell
Nach dem relationalen Datenmodell kann man sich eine Datenbank als eine Menge von Tabellen vorstellen:
Nach dem relationalen Datenmodell kann man sich eine Datenbank als eine Menge von Tabellen vorstellen:
Veranstaltung ID 00001 00002 00003 ...
Name Informatik 2 Java-Programmierkurs Informatik 1 ...
Student Jahr 2009 2009 2010 ...
Semester SS SS WS ...
Matrikelnummer 1045067 ...
Nachname Huber ...
Vorname Markus ...
... ... ...
Das ist die Sicht des Benutzers Mit der physischen Datenhaltung auf der Festplatte hat das nichts zu tun! (siehe Datenbak-Vorlesung) 11
Relationales Datenmodell
12
Relationales Datenmodell
Nach dem relationalen Datenmodell kann man sich eine Datenbank als eine Menge von Tabellen vorstellen:
Nach dem relationalen Datenmodell kann man sich eine Datenbank als eine Menge von Tabellen vorstellen:
Daten werden zeilenweise abgespeichert Attribute
Mathematisch formal ist eine Tabelle eine Relation (also eine Menge von Tupeln) Spaltennamen heißen auch Attribute – sie repräsentieren Wertemengen
Relationenname
Relationenschema
Jede Zeile entspricht einem Tupel in dieser Relation
Relation
Tupel
Beispiel: (0001,Informatik 2,2009,SS) ∈ Veranstaltung 13
14
Modellierung
Objekt-Relationale Abbildung
Zur Modellierung von relationalen Datendanken verwendet man i.d.R. Sog. Entity-Relationsship-Modell (ER-Modelle)
Objekte einer Java-Anwendung lassen sich nicht direkt in einer relationalen Datenbank abspeichern
ER-Modelle sind nicht Teil von UML!
Wir werden im Folgenden andeuten, wie man durch Objekte verwaltete Daten in Tabellen abspeichern kann (Objektrelationale ( Abbildung)
ER-Modelle haben konzepzuell eine gewisse Ähnlichkeit zu Klassendiagrammen (aber nicht grafisch!) Wir werden ER-Modelle hier nicht besprechen (siehe DatenbankVorlesung
Dabei lernen Sie nebenbei etwas über Datenbank-Modellierung Details siehe Datenbank-Vorlesung
15
Objekt-Relationale Abbildung
Objekt-Relationale Abbildung
Beispiel: Eine Klasse (einen strukturierten Datentyp) als Tabelle abbilden Student matrikelnummer :String
16
Beispiel: Eine Klasse (einen strukturierten Datentyp) als Tabelle abbilden Student
Student matrikelnummer
matrikelnummer :String
name
name :String
Student matrikelnummer 1045678
name Huber
name :String
Einwertige Attribute werden Spalten der Tabelle
Objekte werden mit ihren Werten in Zeilen eingetragen
17
18
Objekt-Relationale Abbildung
Objekt-Relationale Abbildung
Beispiel: Eine Klasse (einen strukturierten Datentyp) als Tabelle abbilden
Vorlesung
Student matrikelnummer :String
Beispiel: Eine Klasse (einen strukturierten Datentyp) als Tabelle abbilden
Student matrikelnummer
name
name
1045678
Huber
jahr
name :String
Vorlesung ID name 00001 Info2
jahr semester 2009 SS
semester
Falls eine Klasse kein Schlüsselattribut besitzt, wird ein solches hinzugefügt Künstliches Schlüsselattribut (hier: ID)
In der Tabelle soll eine Spalte identifizierend sein (hier: matrikelnummer) Schlüsselattribut
Werte erhält man durch Durchnummerieren. 19
Objekt-Relationale Abbildung
Objekt-Relationale Abbildung
Beispiel: Beliebig mehrwertige Attribute als Tabelle abbilden Student
Beispiel: Endlich mehrwertige Attribute als Spalten abbilden Student
Student matrikelnummer name
...
20
...
studiengang :String [1..*]
studiengang :String [1..2]
...
Student Studium1 Studium2 Informatik Physik Informatik null
StudiengangStudent Schlüsselattribut Für jeden Wert eine Zeile
matrikelnummer 1045678 1045678 1056904
studiengang Informatik Physik Mathematik 21
22
Objekt-Relationale Abbildung
Objekt-Relationale Abbildung Beispiel: Assoziationen abbilden Referenzattribut
Student
?..1 - ?..? – Assoziationen: Referenzattribut Referenzattribut Vorlesung
... adresse :Adresse [1]
...
ID 0001
Vorlesung ... dozentID 0013
1..*
Adresse
1..1 dozent Professor
strasse plz ...
Professor ID 0013
name
...
... 23
Objekt-Relationale Abbildung
24
Objekt-Relationale Abbildung
Beispiel: Assoziationen abbilden
Beispiel: Generalisierungen abbilden
?..* - ?..* - Assoziationen: Eigene Tabelle
Möglichkeit 1: Alle Attribute in eine einzige Tabelle unbesetzte Zellen, eine gemeinsame ID, neues Attribut typ
Vorlesung ... 0..* 1..* Student ...
ID 0001
Vorlesung ...
Person name
Vorlesung_Student vorlesungID matrikelnummer 00001 1045678 Student matrikelnummer ... 1045678 25
Student
Mitarbeiter
matnummer
persnummer
Person ID name matnummer persnummertyp
26
Objekt-Relationale Abbildung
Objekt-Relationale Abbildung
Beispiel: Generalisierungen abbilden
Beispiel: Alle Klassenattribute in eigene Tabelle abbilden
Möglichkeit 2: Eigene Tabelle für jede konkrete Klasse eigene ID für jede Klasse Übernahme der Attribute abstrakter Oberklassen
Klassenattribute klassenname attributname attributwert
Möglichkeit 3: Eigene Tabelle für jede Klasse gemeinsame ID Zuordnung Oberklasse - Unterklasse über diese ID
Beispiel: Containerklassen zur Objektverwaltung werden nicht abbgebildet, denn die verwalten ja keine eigenen fachlichen Daten
27
SQL
28
SQL
Structured Query Language (SQL): Deklarative Datenbanksprache zur Definition, Manipulation und Abfrage von Daten kann interaktiv als auch eingebettet (in eine Programmiersprache) verwendet werden Einheitliche Schnittstelle für Zugriff auf Datenbanken Jetzt: kurze Einführung mit einfachen Anweisungen am Beispiel 29
Es existieren mehrere SQL-Standards, an die sich existierende DBS nicht 100-prozentig halten → Syntax variiert von DBS zu DBS Wichtige Schlüsselwörter: table record, row field, column
Relation Tupel Attribut
Datentypen ähnlich wie in Programmiersprachen, abhängig vom betrachteten SQL-Standard bzw. DBS 30
SQL
SQL
Definition einer Tabelle: create table Vorlesung ( ID integer name varchar(30) jahr char(4) semester char(2) dozent integer ); Attribute
Datentypen
Löschen Definition einer Tabelle:
Tabellenname Ganze Zahl (4 Byte)
not not not not
null, null, null, null,
drop table Vorlesung
Variabler String der Länge