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.
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 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:
Query qbe=new Query(Person.class)
. Parameter der Funktion
ist die Klasse, deren Objekte gesucht werden sollen.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.qbe.and()
oder
qbe.or()
List<PersistentObject> list=qbe.execute()