Hi, ich bin neu hier im Forum und relativ neu was das entwickeln von Java Anwendungen angeht. Ok ein paar Programme welche keine Grafische Oberfläche enthalten habe ich dann doch schon programmiert.
Derzeit bin ich dabei eine kleine Anwendung zu programmieren mit grafischer Oberfläche, um auch in dem Bereich etwas Erfahrung zu sammeln. Bei der Anwendung geht es um ein Programm welches vielleicht in Zukunft mein Studium unterstützen kann.
Das ganze soll mit der Objektorientierten Datenbank db4o realisiert werden.
Zum Inhalt:
In der Anwendung gibt es ein Datenbankobjekt welches eine TreeMap mit Lehrveranstaltungen beinhaltet. Diese Lehrveranstaltungen haben wiederum TreeMap`s welche die Lerndokumente wie z.B. Skript oder Klausuren enthält. Zu jedem Lerndokument gibt es dann noch Ausarbeitungen wie z.B. Ergaenzungen oder selbst verfasste Texte zu einer Beispielklausur. Diese Ausarbeitungen werden ebenfalls in einer TreeMap gespeichert.
Das ganze stellt sich also ungefähr so grafisch dar:
DB
-> Lehrveranstaltungen
-> Lerndokumente
->Ausarbeitungen
Mein Problem besteht jetzt darin, dass die Lehrveranstaltungen und Lerndokumente zwar in der Datenbank gespeichert werden und auch ausgelesen werden, aber die Ausarbeitungen fehlen nach jedem Neustart des Programms wieder. Wenn ich während der Laufzeit die Daten eintrage und Anzeigen lasse funktioniert das einwandfrei nur nach einem Neustart des Programms sind die Ausarbeitungen weg.
Vielleicht könnte mir jemand einen Tipp geben was genau ich falsch mache. Ich denke das hängt mit der Abspeicherung des Daten in die DB4o Datenbank zusammen. Daher habe ich meine Datenbank Klasse beigefügt. Das Tutorial der DB4o Datenbank habe ich bereits gelesen. Zumindest den wichtigen Teil mit den storing Objects. Wenn ich das richtig verstanden habe sollten eigentlich alle Daten abgespeichert sein wenn ich das jeweilige Lehrveranstaltungsobjekt in der Datenbank speichere.
Irgendwie stehe ich gerade auf dem Schlauch.
Derzeit bin ich dabei eine kleine Anwendung zu programmieren mit grafischer Oberfläche, um auch in dem Bereich etwas Erfahrung zu sammeln. Bei der Anwendung geht es um ein Programm welches vielleicht in Zukunft mein Studium unterstützen kann.
Das ganze soll mit der Objektorientierten Datenbank db4o realisiert werden.
Zum Inhalt:
In der Anwendung gibt es ein Datenbankobjekt welches eine TreeMap mit Lehrveranstaltungen beinhaltet. Diese Lehrveranstaltungen haben wiederum TreeMap`s welche die Lerndokumente wie z.B. Skript oder Klausuren enthält. Zu jedem Lerndokument gibt es dann noch Ausarbeitungen wie z.B. Ergaenzungen oder selbst verfasste Texte zu einer Beispielklausur. Diese Ausarbeitungen werden ebenfalls in einer TreeMap gespeichert.
Das ganze stellt sich also ungefähr so grafisch dar:
DB
-> Lehrveranstaltungen
-> Lerndokumente
->Ausarbeitungen
Mein Problem besteht jetzt darin, dass die Lehrveranstaltungen und Lerndokumente zwar in der Datenbank gespeichert werden und auch ausgelesen werden, aber die Ausarbeitungen fehlen nach jedem Neustart des Programms wieder. Wenn ich während der Laufzeit die Daten eintrage und Anzeigen lasse funktioniert das einwandfrei nur nach einem Neustart des Programms sind die Ausarbeitungen weg.
Vielleicht könnte mir jemand einen Tipp geben was genau ich falsch mache. Ich denke das hängt mit der Abspeicherung des Daten in die DB4o Datenbank zusammen. Daher habe ich meine Datenbank Klasse beigefügt. Das Tutorial der DB4o Datenbank habe ich bereits gelesen. Zumindest den wichtigen Teil mit den storing Objects. Wenn ich das richtig verstanden habe sollten eigentlich alle Daten abgespeichert sein wenn ich das jeweilige Lehrveranstaltungsobjekt in der Datenbank speichere.
Irgendwie stehe ich gerade auf dem Schlauch.
Java:
package storage;
import java.util.List;
import storage.Datenbank;
import storage.Lehrveranstaltung;
import storage.Lerndokument;
import com.db4o.Db4oEmbedded;
import com.db4o.ObjectSet;
import com.db4o.config.EmbeddedConfiguration;
import com.db4o.ext.DatabaseFileLockedException;
import com.db4o.ObjectContainer;
import com.db4o.reflect.jdk.JdkReflector;
import main.Lernmaschine;
public class Datenbank_db4o extends Datenbank {
private static final String dateiname = "lernmaschine.db4o";
private ObjectContainer db;
/**
* Konstruktor Aufruf der Oberklasse
*/
public Datenbank_db4o() {
super();
}
/**
* oeffnet die Datenbank
*/
public void oeffneDB() {
EmbeddedConfiguration config = Db4oEmbedded.newConfiguration();
config.common().reflectWith(new JdkReflector(Thread.currentThread().getContextClassLoader()));
config.common().updateDepth(8);
db = Db4oEmbedded.openFile(config, dateiname);
}
/**
* Liest beim start die Daten aus der Datenbank
*/
public void leseDatenEin() throws Exception {
try {
System.out.println("Lokaler Betrieb mit eingebetteter DB " + dateiname);
oeffneDB();
List<Lehrveranstaltung> lvliste = db.query(Lehrveranstaltung.class);
System.out.println(lvliste.size() + "Lehrveranstaltungen eingelesen ...");
for(Lehrveranstaltung lv : lvliste) {
lehrveranstaltungen.put(lv.gibName(), lv);
}
}
finally {
db.close();
}
}
/**
* Legt eine Lehrveranstaltung an und speichert diese
* in der Datenbank
*
* @return die eingetragene Lehrveranstaltung
*/
public Lehrveranstaltung lehrveranstaltungAnlegen(Lehrveranstaltung lv) {
Lehrveranstaltung lvx = lehrveranstaltungen.put(lv.gibName(), lv);
speichereLehrveranstaltung(lv);
return lvx;
}
/**
* Legt ein Lerndokument an und speichert dieses in
* der Datenbank
*
* @return das eingetragene Lerndokument
*/
@Override
public Lerndokument lerndokumentAnlegen(Lehrveranstaltung lv, Lerndokument ld) {
Lehrveranstaltung lvGelesen = leseLehrveranstaltung(lv);
Lerndokument ldresult = super.lerndokumentAnlegen(lv, ld);
if (lvGelesen != null) {
super.lerndokumentAnlegen(lvGelesen, ld);
speichereLehrveranstaltung(lvGelesen);
}
else {
System.out.println("Die Lehrveranstaltung " + lv.gibName() +
" konnte nicht aus der Datenbank gelesen werden!");
}
return ldresult;
}
/**
* Legt eine Ausarbeitung an und speichert die
* Aenderung in der Datenbank
*
* @return die eingetrage Ausarbeitung oder
* die Ausarbeitung, die in der DB
* ueberschrieben wurde.
*/
@Override
public Lerndokument ausarbeitungenAnlegen(Lehrveranstaltung lv, Lerndokument ld, Lerndokument ausa) {
Lehrveranstaltung lvGelesen = leseLehrveranstaltung(lv);
Lerndokument ldresult = super.ausarbeitungenAnlegen(lv, ld, ausa);
if (lvGelesen != null) {
System.out.println(lvGelesen.gibLerndokument(ld.gibName()));
super.ausarbeitungenAnlegen(lvGelesen, lvGelesen.gibLerndokument(ld.gibName()), ausa);
speichereLehrveranstaltung(lvGelesen);
}
else {
System.out.println("Die Lehrveranstaltung " + lv.gibName() +
" konnte nicht aus der Datenbank gelesen werden!");
}
return ldresult;
}
/**
* Methode zum Auslesen einer Lehrveranstaltung
* aus der Datenbank
*
* @return das gelesene Lehrveranstaltung-Objekt
*
**/
public Lehrveranstaltung leseLehrveranstaltung(Lehrveranstaltung lv) {
Lehrveranstaltung lvGelesen = null; //super.gibLehrveranstaltung(lv.gibName());
lvGelesen = super.gibLehrveranstaltung(lv.gibName());
return lvGelesen;
}
/**
* Methode zum Abspeichern einer Lehrveranstaltung in
* der Objektdatenbank. Die DB wird danach geschlossen.
*
* @return true, wenn die Daten gespeichert werden konnten
*
**/
public boolean speichereLehrveranstaltung(Lehrveranstaltung lv) {
try {
oeffneDB();
db.store(lv);
}
finally {
db.close();
}
return true;
}
}