Objektorientierte Datenbank db4objects

Werbung
Objektorientierte Datenbank db4objects
Herunterladen:
von www.db4objects.de (für Java)
Es kommt db4o-7.4-java.zip (13.1.2008), 32 MB gross.
Installieren:
Verzeichnis db4o anlegen, alles extrahieren.
Klassenpfad anpassen: .
C:\db4o\db4o-7.4\lib\db4o-7.4.71.12224-java5.jar
Testen:
entsprechend der Dokumentation:
- Klasse Pilot compilieren, in ...\db4o-7.2\doc\tutorial\src\com\db4o\f1\chapter1
- Programm FirstSteps.java compilieren (liegt auch dort), muss Packages und Klassen finden
- nach dem Programmstart liegt die erzeugte OODB in ...\db4o-7.2\doc\tutorial\src
oder untenstehendes Programmbeispiel
Programmaufbau:
Imports für
Dateiverarbeitung,
import java.io.File;
Datenbankoperationen, import com.db4o.Db4o;
Ergebnismengen,
import com.db4o.ObjectContainer;
Mengensuche,
import com.db4o.ObjectSet;
Dienste
import com.db4o.f1.Util;
Klasse definieren:
z.B. Person
public class Person
{
private String _name;
private int _age;
public Person(String name,int age)
{
_name = name;
_age = age;
}
public int getAge()
{
return _age;
}
public void setAge(int value)
{
_age = value;
}
…
}
Datenbank anlegen:
new File(“Pfad-Name“).delete()
Datenbank öffnen:
ObjectContainer db=Db4o.openFile(“Pfad-Name“);
Objekte eintragen:
db.store(new Person("Gandhi",79));
db.store(new Person("Lincoln",56));
nach allen fragen
ObjectSet result1 = (ObjectSet) db.queryByExample(new Person());
listResult(result1); ///get all
nach Gandhi fragen
Person p2 = new Person();
p2.setName("Gandhi");
ObjectSet result2 = (ObjectSet) db.queryByExample(p2);
listResult(result2);
nach 56 fragen
Person p3 = new Person();
p3.setAge(56);
ObjectSet result3 = (ObjectSet) db.queryByExample(p3);
listResult(result3);
Gandhis ID ermitteln und dann löschen
Person p4 = new Person();
p4.setName("Gandhi");
ObjectSet result4 = (ObjectSet) db.queryByExample(p4);
Person found=(Person)result4.next();
db.delete(found); // remove the Gandhi object
Datenbank schliessen: db.close();
(Transaktionsende)
Einzelaufgaben:
neues Verzeichnis für die neue Anwendung anlegen
classpath anpassen
Datenbank anlegen
Klasse definieren
Objekt eintragen
alle Objekte lesen
bestimmtes Objekt lesen
Objekt löschen
Datenbank schliessen, löschen
Windows-Einbettung/Java-Panel
Klasse „person“ anlegen, interessanterweise (name, pin, konto, adresse (str, nr, plz, ort), alter, foto)
Oberflächenwerkzeug (Object Manager, aber commercial)
eigene SQL-Realisierung (flache Klasse)
wichtig -> Arbeit mit bestehender SQL-Datenbank
grosse Objekte (Bilder, Töne, Filme)
wo sind Kapselung, Vererbung, Polymorphie ?
wo sind Typkonstruktoren ?
wichtige Datenbankeigenschaften fehlen:
Sprache SQL o.ä.
DDL = Java-Klassendefinition
DML = Java-Programmiersprache
DCL fehlt
Prozeduralität = Java-Programmiersprache
wichtig -> Benutzerverwaltung, Feinheit der geschützten Objekte
Volle Transaktionen (4 levels)
Daten sind nur in Dateien des Dateisystems gespeichert
wichtig -> Dienstprogramme (save/restore)
Interaktive Oberfläche (ohne Programmierung)
Objektorientierte Datenbanksysteme sind Programmiersprachenerweiterungen,
Datenbanken aber führen ein Eigenleben. Sie sind für die jeweilige Organisation zentral und wichtiger
als die Oberflächen.
Architektur, Benutzungsarten:
1) Programm mit eigenen Daten
nur während des Programmlaufs einmalig verfügbar
2) für mehrere Programmläufe verfügbar
meist für eine User, gleiche Klassendefinition für alle Programmläufe
Anwendungsgebiet: embedded databases
3) mehrere Programmläufe und mehrere User
Client/Server-Betrieb
Start/Stopp notwendig
SW-Struktur der Anwendungsprogramme:
1) 1 Programm mit Klassen-(Schema-)-Definition
einfacher bei der Compilation
2) 2 Programme: eins für die Klassen-(Schema-)-Definition, eins für den Ablauf (Main)
mit package, zweimalige Compilation
Afragekonzepte:
(kommt noch)
Datenmodellierung:
1) relationale Konzepte
z.B. person (name, pin, konto)
Tabelle
Spalte
Zeile
->
->
->
Klasse
Attribut
Objekt
2) objektorientierte Konzepte
Tiefe
->
Subklasse
Funktionen
->
Methoden
z.B. person (name, pin, konto, adresse (str, nr, plz, ort), alter, foto)
name text
pin
integer
konto float
adresse Unterklasse
alter
Funktion
foto
grosser Wert
alter:
j = jahr(HEUTE()) – jahr(geburtsdatum)
if dayofyear(HEUTE()) <= dayofyear(geburtsdatum)
then j--;
allgemeine Objektdefinition:
class c
inherit ...
properties ...
operations ...
initializations ...
default ...
constraints ...
triggers ...
Sprache: SQL-ähnlich, mit Punktnotation
z.B. ...
Programmbeispiel:
import java.io.File;
import com.db4o.Db4o;
import com.db4o.ObjectContainer;
import com.db4o.ObjectSet;
public class Personenspeicher
{
public static class Person
{
private String _name;
private int _age;
public Person() {}
public Person(String name,int age)
{
_name = name;
_age = age;
}
public int getAge()
{
return _age;
}
public void setAge(int value)
{
_age = value;
}
public String getName()
{
return _name;
}
public void setName(String value)
{
_name = value;
}
public String toString()
{
return "[" + _name + ";" + _age + "]";
}
}
public static void main(String[] args)
{
new File("C:/vorlesung.yap").delete(); //reset the database
ObjectContainer db=Db4o.openFile("C:/vorlesung.yap");
try {
// eintragen
db.store(new Person("Gandhi",79));
db.store(new Person("Lincoln",56));
// nach allen fragen
ObjectSet result1 = (ObjectSet) db.queryByExample(new Person());
listResult(result1); ///get all
// nach Gandhi fragen
Person p2 = new Person();
p2.setName("Gandhi");
ObjectSet result2 = (ObjectSet) db.queryByExample(p2);
listResult(result2);
// nach 56 fragen
Person p3 = new Person();
p3.setAge(56);
ObjectSet result3 = (ObjectSet) db.queryByExample(p3);
listResult(result3);
// Gandhis ID ermitteln und dann löschen
Person p4 = new Person();
p4.setName("Gandhi");
ObjectSet result4 = (ObjectSet) db.queryByExample(p4);
Person found=(Person)result4.next();
db.delete(found); // remove the Gandhi object
ObjectSet result5 = (ObjectSet) db.queryByExample(new Person());
listResult(result5); ///get all
}
finally {
db.close();
}
}
public static void listResult(ObjectSet result)
{
while (result.hasNext())
{
System.out.println(result.next());
}
System.out.println("-------------------------");
}
}
Herunterladen