tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
15
ZUGRIFFE
1420
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    IrontigerX IrontigerX ist offline Rookie
    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
     

  2. #2
    Technoblade Technoblade ist offline Mitglied Gold
    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?
    IrontigerX bedankt sich. 

  3. #3
    IrontigerX IrontigerX ist offline Rookie
    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
     

  4. #4
    Technoblade Technoblade ist offline Mitglied Gold
    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?
     

  5. #5
    IrontigerX IrontigerX ist offline Rookie
    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
     

  6. #6
    Technoblade Technoblade ist offline Mitglied Gold
    Registriert seit
    Feb 2009
    Beiträge
    193
    Wenn du die .class-Datei in den Classpath für die JSP-Dateien einbindest geht das.
    IrontigerX bedankt sich. 

  7. #7
    IrontigerX IrontigerX ist offline Rookie
    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
     

  8. #8
    Technoblade Technoblade ist offline Mitglied Gold
    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.
    IrontigerX bedankt sich. 

  9. #9
    IrontigerX IrontigerX ist offline Rookie
    Registriert seit
    Jun 2011
    Beiträge
    9
    Danke, werde ich drüber nachdenken!
     

  10. #10
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.443
    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"
            }
        ]
    }
     

  11. #11
    IrontigerX IrontigerX ist offline Rookie
    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
     

  12. #12
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.443
    Zitat Zitat von IrontigerX Beitrag anzeigen
    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
    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.
    IrontigerX bedankt sich. 

  13. #13
    IrontigerX IrontigerX ist offline Rookie
    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
     

  14. #14
    IrontigerX IrontigerX ist offline Rookie
    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)
     

  15. #15
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.443
    Geändert von CPoly (10.06.11 um 13:19 Uhr)
    IrontigerX bedankt sich. 

Ähnliche Themen

  1. Welche Achse verwenden
    Von filigrani im Forum Adobe Flex & AIR
    Antworten: 0
    Letzter Beitrag: 28.01.09, 11:53
  2. Welche Programmiersprache verwenden?
    Von Ssal im Forum Coders Talk
    Antworten: 1
    Letzter Beitrag: 30.10.08, 15:33
  3. Welche Technologie verwenden?
    Von fsmarine im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 5
    Letzter Beitrag: 29.04.08, 09:19
  4. Welche Datenstruktur ist besser?
    Von broetchen im Forum .NET Application und Service Design
    Antworten: 8
    Letzter Beitrag: 22.08.05, 15:40
  5. Welche Datenbank verwenden?
    Von flotschie im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 21.03.05, 15:05