# db4o - Zuweisungsproblem!



## fl_ex (6. Dez 2011)

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:


```
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 (6. Dez 2011)

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 (7. Dez 2011)

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^^ 



```
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
		}

	}
```


----------

