IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

Arbre intervallaire SQL en Jtree


Sujet :

JDBC Java

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Points : 33
    Points
    33
    Par défaut 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 : 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.

  2. #2
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Salut,

    Tu as différentes solutions :

    1) Si ton arbre s'affiche initialement dans un état collapsed et qu'il n'y a que peu de chance qu'on veuille le dérouler totalement, tu peux implémenter un TreeModel qui ne charge les noeuds qu'à la demande.

    2) Tu peux récupérer tous les noeuds dans un seul SELECT, les ordonner par niveau et reconstruire ton arbre complet en mémoire à l'aide de code java. Ou alors implémenter un TreeModel qui utilise comme source de données une Map qui contient tous les noeuds.

    Après faut que tu te poses la question de ce qui vaut la peine de faire.

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Points : 33
    Points
    33
    Par défaut
    La solution n°1 ne me convient pas puisque je dois avoir tous les nœuds pour faire une recherche dans mon jtree

    La solution n°2 semble être le meilleur je vais donc trier mon arbre par les bornes gauches et ensuite le stocker dans une Arraylist et créer mon Jtreemodel à partir de cette Arraylist.
    Je n'ai pas le temps de le faire en ce moment je m'en occuperai bientôt

    merci de ta réponse

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Je remonte ce topic après presque un an, car je suis confronté à cette problématique. Je ne comprends pas notamment pourquoi FileNode prend deux paramètres. quelqu'un peut-il m'éclairer, ou a une meilleure solution que celle proposée ?

    d'avance merci.

Discussions similaires

  1. Déplacement d'un élément dans un arbre intervallaire
    Par Larson dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 17/09/2008, 15h57
  2. Arbres en SQL (à propos de l'article de SQLpro)
    Par ner0lph dans le forum Langage SQL
    Réponses: 5
    Dernier message: 22/04/2008, 02h31
  3. notion d'arbre intervallaire
    Par nieleny dans le forum Langage SQL
    Réponses: 4
    Dernier message: 23/03/2008, 19h30
  4. Affichage du contenu d'un arbre XML dans un JTree
    Par soumou dans le forum Composants
    Réponses: 1
    Dernier message: 04/10/2007, 09h46
  5. parcours d'un arbre en sql
    Par dor_boucle dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/02/2006, 11h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo