-
08.06.11 11:27 #1
- Registriert seit
- Jun 2011
- Beiträge
- 9
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
-
08.06.11 12:07 #2
- Registriert seit
- Feb 2009
- Beiträge
- 193
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?
-
08.06.11 12:10 #3
- Registriert seit
- Jun 2011
- Beiträge
- 9
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
-
08.06.11 12:20 #4
- Registriert seit
- Feb 2009
- Beiträge
- 193
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?
-
08.06.11 12:35 #5
- Registriert seit
- Jun 2011
- Beiträge
- 9
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
-
08.06.11 12:58 #6
- Registriert seit
- Feb 2009
- Beiträge
- 193
Wenn du die .class-Datei in den Classpath für die JSP-Dateien einbindest geht das.
-
08.06.11 13:00 #7
- Registriert seit
- Jun 2011
- Beiträge
- 9
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
-
08.06.11 14:47 #8
- Registriert seit
- Feb 2009
- Beiträge
- 193
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.
-
08.06.11 14:48 #9
- Registriert seit
- Jun 2011
- Beiträge
- 9
Danke, werde ich drüber nachdenken!
-
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.
Code javascript:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
{ "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" } ] }
-
08.06.11 15:07 #11
- Registriert seit
- Jun 2011
- Beiträge
- 9
Wow... das sieht gut aus. Da ich noch in der Einarbeitungsphase bin, kann ich nicht allzu viel dazu sagen. Aber ich werde das definitiv vorschlagen - gefällt mir gut. Besten Dank dafür!
Das heißt also ich würde in Java die DB auslesen und eine JSON Datei erzeugen, mit meiner nötigen Struktur. Diese würde ich dann per JavaScript einlesen und weiter verarbeiten... cool
Gruß
IT
-
Genau. Aber da praktisch jedes JSON auch valides JavaScript ist, ist das Einlesen ganz simpel. Schreib ein "var x = " vor das JSON und binde es als Skript Datei ein. Das war's schon
. Kein Parsen nötig, das macht der Browser nativ.
Code javascript:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
var x = { "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" } ] } ;
Und der Zugriff ist ganz einfach.
Code javascript:1 2 3
alert(x['children'][1]['children'][0]['NodeName']); //Oder auch alert(x.children[1].children[0].NodeName);
Gibt "grandchildren1" aus.
Den Baum traversieren kannst du auch ganz einfach. Z.B. hier mal rekursiv.
Code javascript:1 2 3 4 5 6 7 8 9 10
function traversal(tree) { alert(tree['NodeName']); //Alle Kinder for(var i = 0; i < tree.children.length; i++) { traversal(tree.children[i]); } } traversal(x);
Gibt "foobar1", "children1", "children2" und dann "grandchildren1" aus.
-
08.06.11 15:48 #13
- Registriert seit
- Jun 2011
- Beiträge
- 9
Aha... wow, das nenne ich mal praktisch

Wobei das var x = ... dann noch im Java Code davor gesetzt wird, das habe ich doch richtig verstanden? Durch die Skriptdatei Einbindung wird das dann als normale Variable in einer .jsp Datei eingebunden. Genial
Ich glaube die Lösung wirds wohl werden, gefällt mir, zumal die Traversierung auch einfach ist - das brauche ich nämlich später.
Achja, nur der Vollständigkeit halber: Ich werde wahrscheinlich die Baumimplementierung (zur Darstellung wohlgemerkt) von Mootools:
http://mifjs.net/tree/
nehmen.
Gruß & Danke
IT
-
10.06.11 11:53 #14
- Registriert seit
- Jun 2011
- Beiträge
- 9
Hallo zusammen,
ich habe vorhin mal kurz nachgefragt: Es soll definitiv nicht über eine Datei laufen - also nur per Stream. Auf der JSON Website (http://json.org/) werden ganz unten unter dem Punkt "Java" mehrere APIs angeboten - sogar sehr viele. Hat jemand damit Erfahrung und kann eine Empfehlen?
Gruß & Danke
IT
€dit: Achso: Ich muss übrigens Java Objekte (bekomme ich von hibernate) in JSON konvertieren.
$dit2: Ich glaube org.JSON tut es schon. Ich habe mal etwas gesucht und man kann, wenn ich es richtig verstehe, das JAVA Objekt einfach später mit einem String repräsentieren, was dann ja in JSP weiterverwendet werden kann.Geändert von IrontigerX (10.06.11 um 12:22 Uhr)
-
Das soll gut sein: http://code.google.com/p/google-gson/
Edit: Quelle für "soll gut ein": http://stackoverflow.com/questions/3...a-json-libraryGeändert von CPoly (10.06.11 um 13:19 Uhr)
Ähnliche Themen
-
Welche Achse verwenden
Von filigrani im Forum Adobe Flex & AIRAntworten: 0Letzter Beitrag: 28.01.09, 11:53 -
Welche Programmiersprache verwenden?
Von Ssal im Forum Coders TalkAntworten: 1Letzter Beitrag: 30.10.08, 15:33 -
Welche Technologie verwenden?
Von fsmarine im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 5Letzter Beitrag: 29.04.08, 09:19 -
Welche Datenstruktur ist besser?
Von broetchen im Forum .NET Application und Service DesignAntworten: 8Letzter Beitrag: 22.08.05, 15:40 -
Welche Datenbank verwenden?
Von flotschie im Forum Relationale DatenbanksystemeAntworten: 3Letzter Beitrag: 21.03.05, 15:05



5Danke

Zitieren


Login





