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 : 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);
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
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.