Dieses Package enthält diejenigen Klassen, die direkten Kontakt mit der Datenbank haben.

Es ist wesentlich, dass von anderen Teilen des Programms aus nur über die hier definierten Klassen mit der Datenbank kommuniziert wird. Nur so kann die Konsistenz der Daten gewährleistet werden und kann sichergestellt werden, dass bei einem Wechsel der Datenbank-Engine keine unüberschaubaren Programmänderungen notwendig werden.

Prinzip

Basisklasse ist PersistentObject. Diese ist nicht zur direkten Verwendung gedacht. Alle anderen Klassen sind von PersistentObject abgeleitet. Jede Klasse steht für ein bestimmtes Datenobjekt und entscheidet selbst, welche Tabellen und Felder zur Speicherung ihrer einzelnen Daten verwendet wird.

Jede Datenklasse hat einen Konstruktor mit Parametern, um ein neues, bisher noch nicht in der Datenbank befindliches Objekt dieser Klasse zu erzeugen, und eine statische Funktion load(String id), mit der ein Objekt aus der Datenbank rekonstruiert werden kann.

Die Identifikation eines Objekts geschieht über die automatisch erzeugte eindeutige ID, ein String mit garantiert maximal 25 Zeichen, der garantiert innerhalb des Netzwerks nur ein einziges Mal vorkommt. Die ID eines DatenObjekts kann mit getID() erfragt werden.

Abfragen

Abfragen erfolgen über die Klasse Query. Eine Query-Abfrage liefert eine Liste mit allen zur Bedingung passenden Objekten zurück. Für eine Abfrage müssen folgende Schritte vorgenommen werden:

  1. Erstellung eines Query-Objekts: Query qbe=new Query(Person.class). Parameter der Funktion ist die Klasse, deren Objekte gesucht werden sollen.
  2. Eingeben der Bedingung: qbe.add("Feld","Op","Wert"). Wobei "Feld" der Name des Felds ist, "Op" der Suchoperator (z.B. = oder LIKE) und "Wert" die Filterbedingung. Zu beachten: Bei "Like" sollte die Filterbedingung mit % eingeschlossen sein, um auch unvollständige Wörter zu finden.
  3. (Eventuell) Eingeben einer Verknüpfung zu einer weiteren Bedingung: qbe.and() oder qbe.or()
  4. (Eventuell) Eingeben einer weiteren Bedingung mit qbe.add() wie oben beschrieben. Diese Schritte können beliebig oft wiederholt werden.
  5. Ausführen der Abfrage: List<PersistentObject> list=qbe.execute()