Mit db4o einfach mal Objekte speichern

DB4o ist eine Objekt-Datenbank aus der Java-Welt, welche es inzwischen auch schon länger für .NET gibt.
Interessant an dieser Art der Datenbank ist, das sie ohne SQL und ohne Relationen auskommt.
Objekte werden einfach so wie sie existieren 1:1 in die Datenbank geschrieben.


Unter db4o.com kann man sich das MSI zur Installation herunter laden.
Das Lizenzmodell für db4o sieht 2 Lizenzen vor: Einmal die GPL für open-Source Projekte und einmal eine Kommerzielle Lizenz, welche eben auch für Kommerzielle Projekte gekauft werden muss.

Nach der Installation des MSI-Paketes finden sich im Ordner „C:\Programme\db4o\db4o-7.12\bin\net-3.5“ die DLL´s der Installation.
Hiervon wird erstmal nur eine Referenz zur „Db4objects.Db4o.dll“ gebraucht.
Ist diese im Projekt eingebunden, kann man db4o schon benutzen.

Da wir Datentypen in die Datenbank speichern wollen, basteln wir uns am besten als erstes einen eigenen Datentypen, welchen wir in die Datenbank speichern wollen.

1
2
3
4
5
6
7
class MeinDatentyp
{
    public string name;
    public int alter;
    public string email;
    public DateTime erstelldat;
}

Dies soll jetzt vereinfacht der Datentyp sein, den wir in die Datenbank bringen wollen.
Die Eigenschaften dieses Typs sind mit absicht verschieden um zu demonstrieren das so ein Typ mit unterschiedlichen Typen als Eigenschaften ohne größeren weiteren Aufwand abgespeichert werden kann.

Auf diesem Datentyp erzeugen wir uns jetzt erstmal ein Objekt.

1
2
3
4
5
MeinDatentyp mdt = new MeinDatentyp();
mdt.name = "Sven";
mdt.email = "sven@frickelblog.de";
mdt.alter = 26;
mdt.erstelldat = DateTime.Now;

Nun haben wir endlich ein Objekt „mdt“ vom Typ MeinDatenTyp.
Dieses haben wir aber immer noch nicht weg gespeichert.
Wie funktioniert das Speichern dieses Objektes nun also mit db4o?
Die Lösung ist recht simpel:

1
2
3
4
5
6
7
8
9
10
11
// Die Datenbank ist ein Objekt-Container
IObjectContainer db = Db4oFactory.OpenFile("Datenbank.yap");
try
{
    db.Store(mdt);  // Hier wird das Objekt gespeichert
    db.Commit();    // db4o ist Transaktionsbasiert
}
finally
{
    db.Close();
}

Dazu noch folgedes Using einfügen:

1
using Db4objects.Db4o;

Und das Objekt ist nun in der Datenbank gespeichert 🙂

Wie kann man aber nun das Objekt wieder aus der Datenbank heraus lesen?
Das geht auch relativ einfach:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
IObjectContainer db = Db4oFactory.OpenFile("Datenbnak.yap");
try
{
    // Leerer Datentyp für die suche    
    MeinDatentyp proto = new MeinDatentyp();
    // Suche auf alle Passenden Typen anhand des leeren Datentyps 
    IObjectSet result = db.QueryByExample(proto);
    // Insgesamte Anzahl der Datensätze ausgeben
    Console.WriteLine(result.Count);
    // In einer for-Schleife die gefundenen Datentypen auflisten
    foreach (MeinDatentyp item in result)
    {
        Console.WriteLine(item.name+","+item.alter.ToString()+","+item.email+","+item.erstelldat.ToShortDateString());
    }
}
finally
{
    db.Close();
}

Als Aufgabe bekommt man nun:

1
Sven,26,sven@frickelblog.de,04.04.2010

Die erste Zeile gibt die Anzahl der Onjekte an, welche gefunden wurden – und die zweite Zeile gibt das erste gefundene Objekt zurück.
Würden wir jetzt mehrere Objekte vom selben Typ in der Datenbank gespeichert haben, würden hier natürlich dementsprechend auch mehr Objekte aufgelistet werden.

Ja – das war erstmal der db4o Einstieg.
Ist doch eigentlich recht simpel oder?
Kein Datenbank-bearbeiten mehr, kein Tabellen erstellen, kein Datentypen konvertieren mehr, kein SQL mehr.
Eigentlich hat so eine Objekt-Datenbank doch nur Vorteile – oder..?

One Response to Mit db4o einfach mal Objekte speichern

  1.  

    Hat schon Vorteile so eine Objektorientierte DB. Wobei, heute doch sowieso fast niemand mehr SQL per Hand schreibt. Ist doch alles schon abstrahiert in diversen Frameworks.

    Eine Objektorientierte DB hat aber auch einige Nachteile. Spontan fällt mir z.B. ein, dass man die Programmiersprache nicht wechseln kann, weil diese dann vielleicht mit den Objekten nicht umgehen kann. Gerade auch wenn sprachspezifische Eigenschaften im Modell definiert wurden.

leave your comment

*

Unterstütze den Frickelblog!