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

Langage Java Discussion :

problém d'itération sur un resultset


Sujet :

Langage Java

  1. #1
    Membre expérimenté Avatar de aymen83
    Inscrit en
    Décembre 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 271
    Par défaut problém d'itération sur un resultset
    Bonjour tout le monde
    je vous explique mon pb: j'essai d'extraire des données d'une base de données, ce que je fais c'est que j'extrait le nombre le nombre de table, les noms des tables et maintenant je veux extraire le nombe d'enregistrement de chaque table pour ça j'utilise des ArrayList mais ça ne me donne pas le résultat voulue
    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
    30
    31
    32
     
    public ArrayList<Integer> getFeatureNumber() {
    		return featureNumber;
    	}
    	public void setFeatureNumber(ArrayList<Integer> featureNumber) {
    		this.featureNumber = featureNumber;
    	}
    	public ArrayList<Integer> retrieveFeatureNumbers(){
    		//int i=0;		
    		for(Iterator<String> itr = tablesName.iterator(); itr.hasNext();){//tablesName est un Arraylist contrenant les noms des tables
    			String name = (String)itr.next();
    			//System.out.println(name);
    		String query = "SELECT count(*) As num FROM "+name;
    		try {
    			Statement statement = connection.createStatement();
    			ResultSet rs = statement.executeQuery(query);
    			while(rs.next()){
     
    				int num = rs.getInt("num");
    				featureNumber.add(num);
    				setFeatureNumber(featureNumber);
    				System.out.println(featureNumber.toString());
    			}
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		//System.out.println("le nombre de table est:\t"+tablesNumber);
    		}
     
    		return featureNumber;
    	}

  2. #2
    Membre expérimenté
    Inscrit en
    Octobre 2007
    Messages
    311
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 311
    Par défaut
    Salut,

    Qu'entends-tu par "ça ne me donne pas le résultat voulu" ? Tu as une exception ? Le resultset est vide ?

    Ensuite, 2 petites remarques :
    - tu appelles la méthode setFeatureNumber dans ta boucle. Pourquoi ne pas attendre la fin de la boucle, histoire qu'elle soit remplie, avant de l'affecter ?
    - dans le code que tu fournis, tu ne fermes ni le resultset, ni le statement, ni la connexion.

  3. #3
    Membre expérimenté Avatar de aymen83
    Inscrit en
    Décembre 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 271
    Par défaut
    En ce qui concerne la fermeture de finir l'essentiel du travail
    Pour le resultat, il soit vide soit quelque chose de se genre
    [1]
    [1,0]
    [1, 0,0]
    alors que normalement il doit être [1, 0, 0, 0]
    pour la setFeature.. je vais la corriger
    En faite Je contruit unCheckboxTreeViewer avec ces données avec les noeuds qui représenteent les tables et les sous noeud les enregistrement

  4. #4
    Membre expérimenté
    Inscrit en
    Octobre 2007
    Messages
    311
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 311
    Par défaut
    Le fait qu'il t'affiche 3 fois le contenu de la liste est normal puisque ton affichage se fait à chaque itération de ta boucle for. Ensuite, es-tu bien sûr d'avoir 4 tables dans ta liste tablesName ???

  5. #5
    Membre expérimenté Avatar de aymen83
    Inscrit en
    Décembre 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 271
    Par défaut
    le résultat est te surprend? les tables sont vide il n'ya q'une seule avec 1 enregistrement je les utilise pour le test seulement
    j'ai écrit cette fonction pour extraire les données une à une mais l'output est vide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public int returnAttributes(){
    		int num = 0;
    		for(int i=0; i<featureNumber.size(); i++){
    			num = featureNumber.get(i);
    			System.out.println(num);
    		}
    		return num;
    	}

  6. #6
    Membre expérimenté
    Inscrit en
    Octobre 2007
    Messages
    311
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 311
    Par défaut
    Déjà, cette méthode est bizarre puisqu'elle ne retournera que la dernier élément de la liste.

    Ensuite, je ne comprends plus rien à ton problème...

    Si tu veux bien, dans ta méthode "retrieveFeatureNumbers()", décommente ta trace "System.out.println(name)" afin qu'on connaisse la liste de tes tables et mets une trace "System.out.println(num)" après le rs.getInt("num") pour voir si le resultset est valide ou pas. Poste le résultat affiché, ca aidera peut-etre à mieux comprendre

  7. #7
    Membre expérimenté Avatar de aymen83
    Inscrit en
    Décembre 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 271
    Par défaut
    je ne comprend pas, cette méthode devrait retourner à chaque fois une élément de la liste non?
    pour les autres résultats ça marche nickel, je les ai toutes essayé.
    Y a quelque chose qui ne va pas dans mon raisonnement?

  8. #8
    Membre expérimenté
    Inscrit en
    Octobre 2007
    Messages
    311
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 311
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public int returnAttributes(){
      int num = 0;
     
      for(int i=0; i<featureNumber.size(); i++){
        num = featureNumber.get(i);
        System.out.println(num);
      }
      return num;
    }
    Ta méthode returnAttributes() parcourt l'ensemble de ta liste de résultats. Mais tu écrases ta variable "num" à chaque itération ! Au final, "num" contiendra seulement la dernière ligne de ta liste "featureNumber". Et comme tu fais "return num", ta méthode ne retourne donc que le dernier résultat (cependant, ce devrait te retourner "0", et non pas "")

  9. #9
    Membre expérimenté Avatar de aymen83
    Inscrit en
    Décembre 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 271
    Par défaut
    merci pour l'info. Normalement je dois utiliser cette fonction dans la construction des sous noeud de mon arbre. Donc en utilisant une boucle for pour la construction je dois lui donner à chaque fois le nombre de Feature mais si cette méthode retourne 0 je n'aurai pas mes sous noeuds, non?
    tu peux me dire comment tu vois les choses ça pourrait m'aider?
    merci

  10. #10
    Membre expérimenté
    Inscrit en
    Octobre 2007
    Messages
    311
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 311
    Par défaut
    Citation Envoyé par aymen83 Voir le message
    si cette méthode retourne 0 je n'aurai pas mes sous noeuds, non?
    Tout à fait, mais si ta table ne contient aucun enregistrement, j'imagine que c'est normal que tu ne construises aucun sous-noeud, non ?

  11. #11
    Membre expérimenté Avatar de aymen83
    Inscrit en
    Décembre 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 271
    Par défaut
    oui c'est ça! mais je ne suis pas sur du résultat! en tout cas je vais essayer de changer la méthode.
    Si tu étais à ma place comment tu appréhendrerais les choses
    cordialement

  12. #12
    Membre expérimenté
    Inscrit en
    Octobre 2007
    Messages
    311
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 311
    Par défaut
    Citation Envoyé par aymen83 Voir le message
    oui c'est ça! mais je ne suis pas sur du résultat! en tout cas je vais essayer de changer la méthode.
    Si tu étais à ma place comment tu appréhendrerais les choses
    cordialement
    Ton idée me semble pas mal ! Par contre tente avec des tables significatives, qui ont quelques enregs histoire de voir si tes méthodes fonctionnent bien et si tu n'as pas de fuite mémoire.

  13. #13
    Membre expérimenté Avatar de aymen83
    Inscrit en
    Décembre 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 271
    Par défaut
    Je vais tâcher de le faire merci

  14. #14
    Membre expérimenté Avatar de aymen83
    Inscrit en
    Décembre 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 271
    Par défaut
    bonjour,
    J'ai suivi tes conseils et refait ma base de test.
    quand ma base n'a qu'une seule table ça marche mais si j'ajoute d'autres tables ça ne marche plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    for(int i = 0; i<numRow; i++){
     
    		treeParent = new TreeParent(conn.retrieveTablesName().get(i));
    		root.addChild(treeParent);
     
    		for(int j = 0; j<conn.returnFeatures(); j++){//boucle résponsable de la construction des sous noeuds
    		treeParent.addChild(new TreeObject("Feature"+j));
     
    		}

Discussions similaires

  1. Problème de onLoad sur un feed XML avec un itération.
    Par 20-a-box dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 23/07/2009, 16h15
  2. Problème de reqûete sur la date, année et mois en cours
    Par Jean-Marc dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/02/2004, 16h36
  3. [CR] Problème de sélection sur un champ date
    Par noluc dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 21/11/2003, 16h56
  4. Problème avec RDTSC sur K6-III
    Par le mage tophinus dans le forum x86 32-bits / 64-bits
    Réponses: 17
    Dernier message: 30/09/2003, 09h43
  5. problème de float sur SQL server 2000.
    Par fidji dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 24/07/2003, 14h15

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