21 Zugriff auf eine Datenbank

Werbung
135
Copyright  1994-1997 by Axel T. Schreiner. All Rights Reserved.
21
Zugriff auf eine Datenbank
Das Enterprise Objects Framework
Das klassische Beispiel für Client/Server-Programmierung bilden Datenbanken: Der Server
verwaltet die Daten und schlichtet Konflikte beim Zugriff, die Klienten bieten Oberflächen und
manipulieren die Daten durch Verhandeln mit dem Server. Zur einfachen Programmierung der
Klienten-Oberflächen benötigt man Klassen zum Zugriff auf Datenbanken, Tabellen, Attribute
und Records — dies liefert das Enterprise Objects Framework (EOF).
Adaptor
Model
Entity
Attribut
Record
Zugriff auf eine Datenbank
Beschreibung der Tabellen für die Applikation
Tabelle im Model
Spalte einer Entity, Feld in einem Datensatz
Zeile einer Entity, Datensatz
Die Adaptoren sind datenbank-spezifisch und austauschbar. Sie isolieren die Applikation von
der Datenbank.
FlatFile-Adaptor
FlatFile verwaltet für Testzwecke eine Datenbank als Katalog im Dateisystem, Tabellen als
Dateien im Katalog und Records als Zeilen. Es handelt sich dabei nicht um Zugriff auf einen
Server. Als externe Datentypen sind nur Number, String, Data und Date erlaubt.
{21/telbook/telnumbers}
name
number
axel
2483
bischof 2534
gremeyer
gerda
2480
jutta
2491
picture
2482
{}
Die erste Zeile der Datei benennt die Attribute, als Trenner dienen zum Beispiel tab-Zeichen.
136
Zugriff auf eine Datenbank — tel
Mit dem ProjectBuilder erzeugt man eine neue EOApplication mit Namen tel.
Dabei wird ein ‘‘Wizard’’ ausgelöst, der die Applikation mit einem typischen Fenster
vorbereitet:
Dazu wird eine Datenbank
137
und zum Beispiel FlatFile als Adaptor gewählt:
Für FlatFile ist der gewählte Katalog die Datenbank; mindestens die Titelzeilen der Tabellen
sollten existieren und wie beschrieben getrennt sein. Dann wählt man eine Entity, die im
Fenster gezeigt werden soll:
138
Die Tabelle muß einen Primärschlüssel besitzen:
Da ein Anfragebereich im Fenster angefordert wurde, müssen die Attribute für diesen Bereich
ausgesucht werden:
139
Da eine Tabelle im Fenster gezeigt wird, müssen Attribute für die Tabellenspalten festgelegt
werden:
Das Fenster enthält schließlich noch einen Bereich, in dem Attribute dargestellt und geändert
werden:
Damit existiert das Projekt. Wenn es übersetzt und ausgeführt wird, kann man schon mit
Namen und Nummern umgehen.
140
Das Ziel ist allerdings, zu Namen und Nummern auch Bilder zu verwalten sowie die Nummern
als Zahlen und nicht als Strings zu speichern.
Im ProjectBuilder wählt man unter Other Resources die Beschreibung der
Datenbank tel.eomodeld und öffnet sie durch Doppel-Click.
Im EOModeler ändert man die Beschreibung der Attribute ab, indem man durch
Doppel-Click auf
eine Entity öffnet
141
und mit
Ein Attribut muß als Primärschlüssel
die Attribute bearbeitet:
vereinbart werden.
Ist als Internal Data Type nur Custom angegeben, muß man als Factory Method eine
Klassenmethode angeben, die aus dem Init Argument, wie etwa NSData, ein Objekt der
gewünschten Class erzeugen kann, und als Conversion Method eine Methode, die das
Objekt dann wieder als NSData repräsentiert. Die vordefinierten Methoden stützen sich auf die
Persistenz der Klassen.
142
Mit
vorhandenen Daten sehen:
Mit
kann man für die gewählten Attribute die
wird das Model abgespeichert.
143
Eine Oberfläche mit Bildern
Mit
kann man im
InterfaceBuilder aus dem Katalog /NextDeveloper/Palettes/EOPalette.palette eine neue
Palette hinzufügen.
Die vorgefertigte Applikation verwendet zwei .nib-Dateien. MainDocument.nib enthält die
Darstellung der Tabelle, zu der man noch eine NSImageView hinzufügen sollte:
144
Von der NSImageView richtet man eine EOControlAssoc zur EODisplayGroup ein:
Damit kann man schon im InterfaceBuilder Einträge in der Datenbank vornehmen.
NB: Der FlatFile-Adaptor scheint instabil zu sein.
145
Sybase Limited Server
Aus den Anfangszeiten von NeXTSTEP (2.0) stammt der Sybase Limited Server für m68k. Ein
Sybase Adaptor ist auch für EOF 2.x vorhanden.
Server installieren
Mit Installer installiert man nacheinander das DB-Library- und das Server-Paket. Als root führt
man Folgendes aus:
# cd /usr/sybase
# mkdir database
# SYBASE=/usr/sybase; export SYBASE
# install/startserver -I
Type ’startserver -h’ for help.
startserver: master database device /usr/sybase/database/d_master.sdb
is not present or not writable.
Do you want to create it (y/n)? y
Enter size in megabytes(16Mb):
startserver: building master device, please wait.
startserver: buildmaster completed.
startserver: starting server.
startserver: server started.
startserver: waiting for recovery to complete.
startserver: installing system services, please wait.
startserver: system services installed.
startserver: server SYBASE started.
Mit einem einfachen Dialog wird der Server eingerichtet und gestartet. Mit
# bin/isql -SSYBASE -Usa -P
1> use master
2> go
1> sp_password null,geheim,sa
2> go
Password changed.
(return status = 0)
1> sp_addlogin owner,secret
2> go
New login created.
(return status = 0)
1> sp_addlogin guest,guest
2> go
New login created.
(return status = 0)
1> shutdown
2> go
Server SHUTDOWN by request.
The SQL Server is terminating this process.
DB-LIBRARY error:
Unexpected EOF from SQL Server.
Damit erhält der Verwalter sa das Paßwort geheim und es gibt einen Benutzer owner mit
Paßwort secret und guest mit Paßwort guest. Der Server wird gestoppt.
146
Damit der Server auch von anderen Systemen aus erreichbar ist, muß man die Datei
/usr/sybase/interfaces editieren:
#
SYBASE
query tcp next-ether localhost 1024
master tcp next-ether localhost 1024
console tcp next-ether localhost 1025
sollte der tatsächliche Name des Server-Systems sein. Die Datei muß dann auf den
Klienten-Systemen ebenfalls existieren. Anschließend startet man den Server mit startserver
erneut.
localhost
Datenbank telbook und Tabelle telnumbers einrichten
Als normaler Benutzer führt man folgendes aus:
$ /usr/sybase/bin/isql -SSYBASE -Usa -Pgeheim << ’EOF’
use master
go
create database telbook on default = 2
go
use telbook
go
create table telnumbers
(name varchar(10), number int, picture image NULL)
go
sp_addalias owner,dbo
go
sp_adduser guest
go
grant select,update,insert on telnumbers to guest
go
insert telnumbers (name, number) values ("axel", 2483)
...
go
select name, number from telnumbers
go
quit
EOF
CREATE DATABASE: allocating 1024 pages on disk ’master’
Alias user added.
(return status = 0)
New user added.
(return status = 0)
(1 row affected)
name
number
---------- ----------axel
2483
(1 rows affected)
Damit kann owner die Datenbank telbook manipulieren, guest mit Passwort guest kann in der
Tabelle telnumbers Einfügen, Löschen und Auswählen.
147
Wenn der InterfaceBuilder oder eine Applikation auf eine Sybase-Datenbank zugreifen wollen,
erscheint folgendes Panel:
NB: Löschen funktioniert in tel offenbar nicht.
148
leere Seite
Herunterladen