Inhaltsverzeichnis
db4o
db4o steht für „database for objects“ und ist eine bjektorientierte Datenbank. Die Inhalte werden also nicht in Tabellen abgelegt, sondern direkt als Objekt gespeichert.
Für Java
Ich habe mir das Paket angeschaut und ein Beispiel für Java programmiert und mitgefilmt. Das Ganze habe ich in der IDE Eclipse durchgeführt.
Für C# und .NET
Für unsere Versuche benötigen wir eine einfache Klasse „Person“.
class Person { string name; public Person(string meinName) { name = meinName; } public void NameÄndern(string neuerName) { name = neuerName; } public Boolean Heißt(String einName) { return name.Equals(einName); } public override string ToString() { return name; } }
Um db4o benutzen zu können, importieren wir die nötigen Klassen.
using Db4objects.Db4o;
In einem einfachen Konsolenprogramm erzeugen wir nun eine Datenbank und zwei Personen Max und Moni. Diese werden anschließend in der Datenbank gespeichert.
IEmbeddedObjectContainer db = Db4oEmbedded.OpenFile("datenbank.db4o"); Console.WriteLine("Nun erstellen wir Max und Moni..."); Person max = new Person("Max"); Person moni = new Person("Moni"); Console.WriteLine("... und speichern sie in der Datenbank ab"); db.Store(max); db.Store(moni);
Um an die Objekte in der Datenbank zu gelangen, lassen wir uns alle Personen ausgeben, die in der Datenbank gespeichert sind.
Console.WriteLine("Wir geben alle Personen aus, die sich in der Datenbank befinden."); // Wir suchen nach allen Personen in der Datenbank IList<Person> gefunden = db.Query<Person>(); foreach (Person person in gefunden) { Console.WriteLine("> " + person.ToString()); }
Ausgabe: > Max > Moni
Wenn wir nachträglich ein Objekt ändern, müssen wir der Datenbank die Änderung mitteilen. Das machen wir nun, indem wir den Namen von Max ändern.
Console.WriteLine("Wir können die Objekte auch ändern: z.B. den Namen."); max.NameÄndern("Maxi"); Console.WriteLine("Und speichern das aktualisierte Obekt wieder ab."); db.Store(max); Console.WriteLine("So sieht der Inhalt der Datenbank nun aus:"); gefunden = db.Query<Person>(); foreach (Person person in gefunden) { Console.WriteLine("> " + person.ToString()); }
Ausgabe: > Maxi > Moni
Wir können die Datenbank gezielt nach bestimmten Objekte durchsuchen. Dazu übergeben wir der Query-Methode ein Prädikat, das für alle Objekte erfüllt sein muss, die wir suchen.
Console.WriteLine("Wir können auch nur bestimmte Personen ausgeben - z.B. alle Monis"); IList<Person> monis = db.Query<Person>(p => p.Heißt("Moni")); foreach (Person eineMoni in monis) { Console.WriteLine("> " + eineMoni); }
Ausgabe: > Moni
Zum Schluss löschen wir alle Personen wieder aus der Datenbank.
Console.WriteLine("Nun löschen wir alle Personen aus der Datenbank."); IList<Person> allePersonen = db.Query<Person>(); foreach (Person person in allePersonen) { Console.WriteLine("Lösche " + person.ToString()); db.Delete(person); }
Ausgabe: > Lösche Maxi > Lösche Moni
Um die Datenkbankverbindung sauber zu beenden, schließen wir zum Schluss die Datenbank.
Console.WriteLine("Am Ende schließen wir unsere Datenbank wieder"); db.Close();