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

Collection et Stream Java Discussion :

Probleme pour afficher élement d'une arrayList de type ResultSet


Sujet :

Collection et Stream Java

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3
    Par défaut Probleme pour afficher élement d'une arrayList de type ResultSet
    Bonjour,

    J'ai une table sql qui contient des requêtes.
    Je dois sélectionner et boucler pour exécuter toutes les requêtes sélectionnées.
    J'ajoute le résultat de chaque requete dans mon ArrayList resultatRequete.
    Avec quelques affichages j'ai pu voir que y'a bien 2 requêtes qui se sont exécutées et le tableau contient 2 résultats donc je pense que c'est ok.
    Mais je n'arrive pas à afficher les éléments de mon arrayList. J'ai vu un peu les méthodes toString mais pas trop compris comment ça marchait
    Je suis débutante débutante débutante en java.

    Appli.java
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par ninoub Voir le message
    Bonjour,

    J'ai une table sql qui contient des requêtes.
    Déjà, coté design, ça sent très mauvais ça. Pourquoi diable as-tu besoin de stocker des requêtes sql dans une table?

    J'ajoute le résultat de chaque requete dans mon ArrayList resultatRequete.
    Non, tu y ajoute les ResultSet obtenu, pas le résultat de la requête. Le résultat, c'est ce que tu obtiens en parcourant le ResultSet, ce que tu devrait faire immédiatement, avant de passer à la requête suivante. Voir la FAQ:
    http://java.developpez.com/faq/jdbc/...s-un-ResultSet
    http://java.developpez.com/faq/jdbc/...r-un-ResultSet

    Mais je n'arrive pas à afficher les éléments de mon arrayList.
    Corrige d'abord ce que j'ai mentionné plus haut. Basiquement, tu ne devrais pas créer de List<ResultSet> mais des List<TonObjetResultat>. Ensuite, tu pourra parcourir cette liste pour l'afficher

    En pseudo code ça donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    pour toute requete à executer
      resultset = executer la requete
      tant qu'il y a des élément dans le resultset
        construire un objet avec les données de la ligne courante
        stocker cet objet dans l'arraylist
      fin tant
      fermer le resultset
    fin pour
    fermer la connection
    J'ai vu un peu les méthodes toString mais pas trop compris comment ça marchait
    Une méthode toString() sert à convertir l'objet où elle est implémentée en une chaine de caractère. C'est utilisé dès qu'un objet doit être utilisé dans une String. Comme par exemple quand tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("Obtenu un object: "+monObject);
    c'est convertis par le compilateur en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.out.println("Obtenu un object: "+monObject.toString());
    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class Voiture {
       private String modele;
       private int annee;
       private String marque;
       private Carburant carburant;
       // ....
       public String toString(){
          return "Voiture "+marque+" "+modele+" de "+annee+" motorisation "+carburant
       }
    }

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Déjà, coté design, ça sent très mauvais ça. Pourquoi diable as-tu besoin de stocker des requêtes sql dans une table?
    Je dois garder et exécuter des requetes entrées par les utilisateurs et les exécuter


    Non, tu y ajoute les ResultSet obtenu, pas le résultat de la requête. Le résultat, c'est ce que tu obtiens en parcourant le ResultSet, ce que tu devrait faire immédiatement, avant de passer à la requête suivante. Voir la FAQ:
    http://java.developpez.com/faq/jdbc/...s-un-ResultSet
    http://java.developpez.com/faq/jdbc/...r-un-ResultSet
    Merci j'ai lu mais j'ai pas trouvé la solution recherchée vu que j'ai une liste de ResultSet


    Corrige d'abord ce que j'ai mentionné plus haut. Basiquement, tu ne devrais pas créer de List<ResultSet> mais des List<TonObjetResultat>. Ensuite, tu pourra parcourir cette liste pour l'afficher
    J'ai écrit ça sauf que je vois pas ce que represente List<TonObjetResultat> , dans ma liste j'ajoute les resultats des requetes donc je comprends pas pourquoi je ne peux pas faire un List<ResultSet>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for (int i=0; i<listeRequetesATraiter.size();i++) {
    						ResultSet res = st.executeQuery((String) (listeRequetesATraiter.get(i)));
    						while (res.next()) {
     
    						}
    					}
    Ensuite, ici la methode utilisée pour recuperer la ligne d'un resultat quelconque (j'ai fait le test sur un resultSet basic) resultat.absolute(1) ne fonctionne pas et m'affiche un message d'erreur qui dit : ResultSet is TYPE FORWARD ONLY, et comme indiqué dans la faq j'ai mis : Statement st = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE
    ,ResultSet.CONCUR_READ_ONLY);


    Merci pour l'explication de la méthode toString

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par ninoub Voir le message
    Je dois garder et exécuter des requetes entrées par les utilisateurs et les exécuter
    Donc le design ET l'analyse des besoins sentent mauvais . Ce n'est pas normal de laisser un utilisateur entrer une requête SQL lui même. Tes utilisateurs sont venus te voir en te disant "bonjour, je connais le SQL, je veux juste un outil pour me permettre de garder mes requêtes les plus courantes et les afficher car je n'ai pas envie d'utiliser un outil bien foutu comme SQLDevelopper, squirell ou mysql workbench"?



    Citation Envoyé par ninoub Voir le message
    Merci j'ai lu mais j'ai pas trouvé la solution recherchée vu que j'ai une liste de ResultSet
    Si tu as lu ce que j'ai dit, tu n'est pas censé avoir une Liste de ResultSet. Tu est censé parcourir le résultSet pour ne extraire les informations et c'est ces informations que tu stocke dans ta liste.




    J'ai écrit ça sauf que je vois pas ce que represente List<TonObjetResultat>
    TonObjetResultat est une classe que tu crée et destinée à stocker une ligne de données. Ca dépend évidement de ce qu'il y a comme données. Si ta table est Contact avec des colonnes Nom, Prenom, rue, numero , ville, telephone, ... tu créra une classe Contact avec ces champs. Evidement, si tu ignore ce que retourne ta requête SQL, ça se complique, faut alors passer par un structure plus basique, genre une List<Object[]> mais ça ne va pas faciliter la manipulation par la suite.


    , dans ma liste j'ajoute les des requetes donc je comprends pas pourquoi je ne peux pas faire un List<ResultSet>
    Parce que un ResultSet:
    • n'est en général pas censé être lu plusieurs fois
    • n'est en général pas accessible en accès aléatoire
    • est en général invalidé lors de la second requête (ça dépend de ton SGBD)
    • représente une ressource partagée entre ton client et le serveur SQL, tu n'a pas envie que cette ressource traine plus de quelques millisecondes

    Donc oui, tu peux créer une List<ResultSet> si:
    • tu la consomme immédiatement après et pas plus tard
    • et si chaque ResultSet émane d'une connexion différente


    Mais ce n'est pas ton cas

    =
    Ensuite, ici la methode utilisée pour recuperer la ligne d'un resultat quelconque (j'ai fait le test sur un resultSet basic) resultat.absolute(1) ne fonctionne pas et m'affiche un message d'erreur qui dit : ResultSet is TYPE FORWARD ONLY, et comme indiqué dans la faq j'ai mis : Statement st = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE
    ,ResultSet.CONCUR_READ_ONLY);
    Sans voir le code à l'intérieur de ton while, difficile de le corriger

Discussions similaires

  1. probleme pour afficher une photo
    Par zyriuse dans le forum C#
    Réponses: 3
    Dernier message: 16/12/2009, 01h14
  2. Réponses: 2
    Dernier message: 13/12/2007, 14h53
  3. Réponses: 1
    Dernier message: 08/06/2007, 09h12
  4. Réponses: 2
    Dernier message: 31/01/2007, 09h45
  5. [LG] Problème pour afficher une matrice
    Par phoebee dans le forum Langage
    Réponses: 4
    Dernier message: 11/08/2005, 21h41

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