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
Et la fonction
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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);
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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(); } }
Partager