db4o - Zuweisungsproblem!

fl_ex

Bekanntes Mitglied
Hey Leute,

ich fummel gerade so ein bisschen mit der db4o Bibliothek rum...
Habe jetzt schon Datenbanken angelegt und Objekte können ebenfalls abgespeichert werden...
Nun habe ich 2 Datenbankfiles (Person und Program).
Nun möchte ich eine Person herausziehen und einer "Userliste" eines Programmobjekts hinzufügen...Er gibt mir keinen Fehler zeigt ebenfalls die Konsolenoutputs...Aber die Liste bleibt leer :/

Hier der Java-Code von der Methode:

Java:
	public void editProgramInDB(Program program, Person person) {

		ObjectContainer containerProgram = Db4oEmbedded
				.openFile("Y:/Program.db");
		ObjectContainer containerPerson = Db4oEmbedded.openFile("Y:/Person.db");

		try {

			ObjectSet<Program> queryProgram = containerProgram
					.queryByExample(program);
			ObjectSet<Person> queryPerson = containerPerson
					.queryByExample(person);
			Program foundProgram = (Program) queryProgram.next();
			Person foundPerson = (Person) queryPerson.next();

			foundProgram.addUserToList(foundPerson);

			containerProgram.store(foundProgram);
			containerPerson.close();
			containerProgram.close();

			System.out.println("Person mit ID=" + foundPerson.getFirstname()
					+ " wurde zum Programm:" + foundProgram.getName()
					+ " hinzugefügt!");
		} catch (DatabaseClosedException e) {
			e.printStackTrace();
		} catch (DatabaseReadOnlyException e) {
			e.printStackTrace();
		}
	}

Jemand ne Ahnung? Probiere schon seit geraumer Zeit hier rum^^
 

fl_ex

Bekanntes Mitglied
Und wenn ich zuerst (bevor ich das Programm der Datenbank hinzufüge) Personenobjekte in die userListe des Programms packe und dann in die DB schreibe...Funktioniert alles... :/

Will aber das Programm aus der DB ziehen...Verändern (also Personen der Liste hinzufügen)...Und dann wieder ab in die DB packen!
 

fl_ex

Bekanntes Mitglied
Okay Hab jetzt eine Lösung gefunden

Pseudocode:
#1 - Deklariere eine leere Person
#2 - Zieh die Person aus der DB und speicher sie unter der Variable ab!
#3 - Schließe Verbindung zur Personen-DB!
#4 - Öffne Verbindung zur Programm-DB, ziehe das Programm raus...
#5 - Ziehe alle Personen die in der Liste sind in eine Neue Liste und füge die vorher gespeicherte Person hinzu
#6 - Ersetze die komplette Liste mit der neuen!
#7 - Verbindung schließen!

...Es scheint so zu sein das man Listen nicht erweitern kann sondern nur komplett neue hinzufügen kann....So Funktioniert es jedenfalls^^ :)


Java:
public void editProgramInDB(Program program, Person person) {

		Person foundPerson = new Person();

		ObjectContainer containerPerson = Db4oEmbedded.openFile("Y:/Person.db");

		try {

			ObjectSet<Person> queryPerson = containerPerson
					.queryByExample(person);
			foundPerson = (Person) queryPerson.next();

			containerPerson.close();
		} catch (DatabaseClosedException e) {
			e.printStackTrace();
		} catch (DatabaseReadOnlyException e) {
			e.printStackTrace();
		}

		try {

			ArrayList<Person> userList = new ArrayList<Person>();

			ObjectContainer containerProgram = Db4oEmbedded
					.openFile("Y:/Program.db");
			ObjectSet<Program> queryProgram = containerProgram
					.queryByExample(program);

			Program foundProgram = (Program) queryProgram.next();

			for (Person user : foundProgram.getUserList()) {
				userList.add(user);
			}

			userList.add(foundPerson);
			foundProgram.setUserList(userList);

			containerProgram.store(foundProgram);
			containerProgram.commit();
			containerProgram.close();

		} catch (Exception e) {
			// TODO: handle exception
		}

	}
 

Ähnliche Java Themen


Oben