Habe eine Datenbank bestehend aus knapp 30.000 Kategorien.
Folgende Struktur ist vorhanden:
CategoryID, CategoryLevel, CategoryName, CategoryParentID, LeafCategory.
Mit diesen Daten versuche ich ein wenig verzweifelt einen Kategoriebaum mittles jTree aufzubauen.
Im Grunde brauch ich nur das root Element (was wir hier einfach mal "Kategorien" nennen), denn das rootElement kann man ja einfach dem Konstruktor übergeben.
Habe mir folgene Funktion geschrieben. Nachdem das Programm 10 Minuten lang keine Reaktion mehr aufnehmen wollte hab ich es abgeschossen.
Als ich beim rekursiven Aufruf level++, statt ++level gesetzt hatte gabs nen Stackoverflow.
Seht ihr vielleicht meinen Denkfehler?
Folgende Struktur ist vorhanden:
CategoryID, CategoryLevel, CategoryName, CategoryParentID, LeafCategory.
Mit diesen Daten versuche ich ein wenig verzweifelt einen Kategoriebaum mittles jTree aufzubauen.
Im Grunde brauch ich nur das root Element (was wir hier einfach mal "Kategorien" nennen), denn das rootElement kann man ja einfach dem Konstruktor übergeben.
Habe mir folgene Funktion geschrieben. Nachdem das Programm 10 Minuten lang keine Reaktion mehr aufnehmen wollte hab ich es abgeschossen.
Java:
/**
* Baut den Kategoriebaum aus der Datenbank auf
* @return das Wurzelelement des Baums
*/
public DefaultMutableTreeNode getCategories(){
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Kategorien");
return getCategoriesLevel(1, root);
}
/**
* Erstellt die Kategorien des i'ten Levels
* @param level Kategorielevel
* @param root Wurzelelement
* @return Wurzelelement
*/
public DefaultMutableTreeNode getCategoriesLevel(int level, DefaultMutableTreeNode root){
DefaultMutableTreeNode node;
String sql, catName;
int catID, catParID;
boolean isLeaf;
Statement st;
ResultSet rs;
Kategorie cat;
sql = "SELECT CategoryID, CategoryName, CategoryParentID, LeafCategory FROM ebaycat WHERE CategoryLevel = "+level;
try {
st = cn.createStatement();
rs = st.executeQuery(sql);
while(rs.next()){
catID = rs.getInt("CategoryID");
catName = rs.getString("CategoryName");
catParID = rs.getInt("CategoryParentID");
isLeaf = rs.getBoolean("LeafCategory");
cat = new Kategorie(catID, catName, catParID, isLeaf);
node = new DefaultMutableTreeNode(cat);
root.add(node);
if(!isLeaf){
getCategoriesLevel(++level, node);
}
}
} catch (SQLException ex) {
gui.makeErrorMessage(ex.toString());
return null;
}
return root;
}
Als ich beim rekursiven Aufruf level++, statt ++level gesetzt hatte gabs nen Stackoverflow.
Seht ihr vielleicht meinen Denkfehler?