Welche Datenstruktur verwenden?

IrontigerX

Grünschnabel
Hallo zusammen,

ich möchte per Java Daten aus einer DB lesen. Dort sind u. a. Attribute und Knoten gespeichert, sodass diese Attribute zu einer Baumstruktur (ähnlich dem des Windows Explorers) aufgebaut werden können. Ich habe mich in Java mal umgesehen und für Bäume nur TreeSet und TreeMap gefunden. Leider werden bei beiden die Daten automatisch eingefüllt und sortiert - ich habe aber eine Struktur vorgegeben. Gibt es vielleicht eine andere Baumstruktur, die ich übersehen habe?
Um das vorwegzunehmen: Ich möchte das Ergebnis nicht in Java darstellen (swing), sonder mit Javascript, dass heißt: Per Java wird die DB ausgelesen und in einer Datenstruktur gespeichert. Diese wird dann in einer JSP Datei mit Javascript (wahr. Mootools) weiterverarbeitet. Das heißt, ich muss entweder: Eine Baumstruktur nehmen, die auch Javascript kennt (unwahrscheinlich) oder eine, die man serialisieren kann.
Dazu hätte ich dann auch gerne eure Meinung: Gibt es dann vielleicht etwas sinnvolleres als eine Baumstruktur? Mir ist da spontan ein 2D Array eingefallen, wo pro Array-Element ein Array pro "Baumebene" gespeichert wird. Macht das mehr Sinn oder gibt es vielleicht eine bessere Alternative?

Zum Verständnis hier die Struktur der DB:

Attribut
ID | int | NotNull | auto_increment
attributeID | int | NotNull
nodeID | int | NotNull

Knoten
ID | int | NotNull | auto_increment
ParentNode | int | Standard:NULL
NodeName | varchar

Hoffentlich ist das verständlich :)

Gruß & Danke

IT
 
Wäre mir neu wenn es etwas derartiges geben würde. Immer wenn ich so etwas bisher gebraucht habe, habe ich selbst programmierte Datenstrukturen verwendet. Die haben immer den Vorteil, dass man sie genau auf die eigenen Bedürfnisse anpassen kann.

Ich frage mich allerdings gerade weswegen du die Daten aus der DB erst in Java verarbeiten willst um sie dann in ein JSP zu packen in dem du dann serialisierte Dateien lädst. Wäre es nicht einfacher aus dem JSP heraus auf die DB zuzugreifen? Oder lässt dein spezieller Fall das nicht zu?
 
Hallo,

erst einmal Danke für die Antwort ;)
Nun, ich muss mit Struts arbeiten und die Kontrollfunktionen, also z. B. DB Zugriffe, laufen über Java.
Hast du eine gute Idee bzgl. einer Datenstruktur? Also der Baum scheint sich wohl zu verabschieden (habe das fast schon vermutet).

Gruß

IT
 
Du könntest ganz simpel deine Datenbank auf Java abbilden. Also eine Klasse Knoten und eine Klasse Attribut erstellen, welche die für dich nötigen Variablen enthält. Die IDs in den solltest du natürlich durch Objektreferenzen ersetzen. dadurch entsteht dein Baumstruktur auch schon wieder. Das einzige dabei auftretende Problem ist, dass du ggf. einen Datensatz aus deiner DB lädst dessen ID auf einen anderen Datensatz verweist den du noch nicht geladen hast. Das Problem müsste man natürlich lösen.

Was das mit dem DB-Zugriff angeht, wenn ich recht informiert bin kann man in JSP doch auch ganz normalen Java-Code verwenden, ergo also auch mit Java DB-Abfragen machen. Oder irre ich da?
 
Hallo,

ja, man kann per JSP Java ausführen. Der Aufruf der Java Funktion zum auslesen der DB würde auch in JSP geschehen - nur ist der Code halt in Java woanders abgelegt.
Meines wissen kann man in JSP aber nicht auf eine Baumstruktur die man in Java geschrieben und zurück gibt zugreifen oder?
Heißt das nicht umgekehrt, dass ich zwar alles schon sortiert im Baum habe, aber in Javascript nicht damit arbeiten kann?

Gruß

IT
 
Hmm... ich muss mal Rücksprache halten - das geht aber wohl erst nächste Woche. Ich würde mich dann ggf. nochmal melden.
Auf jeden Fall danke für die Ideen/Hinweise.
(Falls noch jemand - nur zur Sicherheit - eine tolle "flache" Datenstruktur hat, gerne her damit ;))

Gruß

IT
 
Eine Idee fällt mir noch ein, du könntest auch einfach ein eigenes Dateiformat verwenden. Das erhöht aber natürlich deinen Aufwand erheblich beim erzeugen und beim laden der Datei.
 
Ich will noch kurz was bezüglich der Weiterverarbeitung mittels JavaScript sagen.

Wenn man an Bäume denkt, sollten eigentlich die XML Glocken im Kopf läuten. Da XML nichts anderes ist, als ein serialisierter Baum, könntest du ja eine fertige Bibliothek für XML nehmen. Je nach DBMS kannst du sogar direkt XML als Ergebnis der Abfrage erhalten.

Oder aber du benutzt JSON. Das lässt sich per JavaScript noch besser verarbeiten. Würde dann etwa so aufgebaut sein.

Javascript:
{
	"ID": 1,
	"NodeName": "foobar1",
	"children":
	[
		{
			"ID": 11,
			"NodeName": "children1",
			"children": [],
			"attributes": []
		},
		{
			"ID": 21,
			"NodeName": "children2",
			"children": 
			[
				{
					"ID": 111,
					"NodeName": "grandchildren1",
					"children": [],
					"attributes": []
				}
			],
			"attributes": []
		}
	],
	"attributes":
	[
		{
			"ID": 1337,
			"Name": "foo",
			"Value": "bar"
		},
		{
			"ID": 563,
			"Name": "woot",
			"Value": "baz"
		}
	]
}
 
Zurück