Arbre intervallaire SQL en Jtree
Bonjour,
Ma question est simple qu'elle est la meilleur méthode pour transposer mon arbre intervallaire qui est dans une table SQL en JTree dans mon IHM.
J'ai utilisé le tuto:http://sqlpro.developpez.com/cours/arborescence/ pour créer un arbre intervallaire dans SQL server express
La solution que j'utilise pour le moment est une fonction récursive qui fait une requête SQL par nœud
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| ResultSet result = state.executeQuery("SELECT * FROM T_TREE WHERE NIVEAU=0");
// On récupère les MetaData
ResultSetMetaData resultMeta = result.getMetaData();
result.next();
// Récupere l'id
int id = result.getInt("ID");
// Récupere the name
String name = result.getString("NAME");
// Récupere the niveau
int niveau = result.getInt("NIVEAU");
// Récupere the borne gauche
int bg = result.getInt("BG");
// Récupere the borne droite
int bd = result.getInt("BD");
// Cree un filenode
FileNode node = new FileNode(id, name);
// Ajoute le noeud a la racine
DefaultMutableTreeNode root = new DefaultMutableTreeNode(node);
// Appel de la fonction récursive qui construit l'arbre
niveau = niveau + 1;
loadNode(root, id, name, niveau, bg, bd); |
Et la fonction
Code:
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
| public void loadNode(DefaultMutableTreeNode node, int id, String name, int niveau, int bg, int bd) {
try {
Statement state2 = ConnectionSQL.getInstance().createStatement();
//Recherche les noeuds enfant de node
ResultSet result2 = state2.executeQuery("SELECT * FROM T_TREE WHERE NIVEAU=" + niveau + "AND BG>" + bg + "AND BD<" + bd);
ResultSetMetaData resultMeta2 = result2.getMetaData();
while (result2.next()) {
id = result2.getInt("ID");
name = result2.getString("NAME");
niveau = result2.getInt("NIVEAU");
bg = result2.getInt("BG");
bd = result2.getInt("BD");
FileNode node2 = new FileNode(id, name);
DefaultMutableTreeNode child = new DefaultMutableTreeNode(node2);
node.add(child);
niveau = niveau + 1;
//Rappel la fonction pour contruire les sous noeuds
loadNode(child, id, name, niveau, bg, bd);
}
state2.close();
result2.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} |
Cela ne me semble pas très optimale pour le moment cela fonctionne très bien mais j'ai peur que quand mon arbre va grandir cela prenne beaucoup de temps pour le charger.