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

Java Discussion :

rafraichissement liste et selection liste : probleme resultSet


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 23
    Par défaut rafraichissement liste et selection liste : probleme resultSet
    bonjour, je crée une liste ou je récupère des donné d'un BD
    si je clique sur la liste, et j'affiche dans les case les informations pour la référence cliqué
    puis je peux modifier, supprimer ou vider les cases pour ajouter une nouvelle ligne
    normalement après chaque modification, ajout, suppression, il rerempli la liste pour voir les modification
    cette ligne de rafraichissement de liste, je la met dans un bouton de rafraichissement séparé qui ne contient que ça

    si j'appuie sur le bouton "rafraichissement", je rerempli la liste
    j'ai ajouté une donné
    j'ai rafraichi, ça apparait

    maintenant, je sélection dans la liste un élément
    et je reclique sur le bouton de rafraichissement
    il effectue le rafraichissement
    et au retour de la variable contenuliste, il me mes ce message d'erreur dans le terminal :
    "org.postgresql.util.PSQLException : le ResultSet n'est pas positionné correctement, vous pouvez peut-être appeler next()."

    puis si je reclique à nouveau sur rafraichissement, le message n'apparait plus

    et si je resselectionne quelque chose et que je rafraichi à nouveau, il rafraichi et me remet un message d'erreur

    je me rend compte du moment ou l'erreur apparait en posant des balise au niveau des code de l'affichage de la liste et je suis l'avancé avec le débogueur :
    le message est expédié, passe dans tout le code, ressort correctement, revient à l'expéditeur et là seulement il y a un message d'erreur.
    et je ne voie vraiment pas d'où ça peut venir

    voici les différente parti du code :

    .l'affichage de la liste :

    ..appel initiale (FenetreBD) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private JList liste = new JList(bd_dialogue.afficher());
    ..appel de rafraichissement (FenetreBD) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste.setListData(bd_dialogue.afficher());
    ..traitement des requêtes d'appel (DialogueBD) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Vector afficher (){
            java.util.Vector<String> contenuliste = new java.util.Vector<String>();
            try {
                ResultSet réponse_aff = requete.executeQuery("select refpro from produit");
                while (réponse_aff.next()) {
                    contenuliste.add(réponse_aff.getString("refpro"));
                }
            } catch(Exception e){System.out.println(e);}
            System.out.println(contenuliste);
            return contenuliste;
        }
    .la sélection dans la liste :

    ..appel de la sélection (FenetreBD) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    liste.addListSelectionListener(new ListSelectionListener() {
        public void valueChanged(ListSelectionEvent e) {
            refpro = (String)liste.getSelectedValue();
            Object[] tableau = bd_dialogue.select(refpro);
     
            npro = (String)tableau[0];
            case_col2.setText((String)tableau[1]);
            case_col3.setText((String)tableau[2]);
            case_col4.setText((String)tableau[3]);
            case_col5.setText((String)tableau[4]);
        }
    });
    ..traitement de la requête d'appel (DialogueBD) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Object[] select (String refpro){
            Object[] tableau = new Object[5];
            try {
                ResultSet réponse = requete.executeQuery("select npro, refpro, libelle, prix, qstock from produit where refpro like '" + refpro + "'");
                réponse.next();
                tableau[0] = réponse.getString("npro");
                tableau[1] = réponse.getString("refpro");
                tableau[2] = réponse.getString("libelle");
                tableau[3] = réponse.getString("prix");
                tableau[4] = réponse.getString("qstock");
            } catch(Exception e){System.out.println(e);}
            return tableau;
        }
    on dirait que chaque fois que je passe dans le code "traitement de la requête d'appel (DialogueBD)", il se passe un truc qui crée une erreur pour le rafraichissement

    si vous souhaiter l'intégralité du code, n'hésitez pas à demander
    en espérant que quelqu'un saura m'aider
    bonne soirée

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par défaut
    Peut-être qu'en ajoutant un :
    après avoir lu les enregistrements dans afficher () résoudrait le problème.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 23
    Par défaut trouvé mais je ne sais pas le régler
    alors, j'ai refait un débogueur sur le conseil de mon prof mais en pas à pas

    quand je clique sur rafraichissement ...
    il passe dans la boucle afficher() et c'est tout

    si je sélection un objet dans la liste puis sur rafraichir,
    il passe dans la bouche afficher() puis au retour, affiche la liste
    et ensuite il passe dans la boucle action de la liste
    donc il passe dans la boucle select() et là forcément il y a une erreur

    je pense qu'il prend le remplissage de la liste comme une action du fait que quand je rafraichi, il y a toujours la sélection de fait

    aurait il une fonctionne pour des-sélectionner la liste avant de la reremplir ?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par défaut
    Je n'avais pas vu la méthode select,
    il manque un reponse.beforeFirst () avant de faire le next () pour se positionner en début de sélection.
    Et bien sur un response.close () une fois le travail effectué.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 23
    Par défaut
    j'ai essayé ton code sur les 2 parties :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        Vector afficher (){
            java.util.Vector<String> contenuliste = new java.util.Vector<String>();
            try {
                ResultSet réponse_aff = requete.executeQuery("select refpro from produit");
                réponse_aff.beforeFirst();
                while (réponse_aff.next()) {
                    contenuliste.add(réponse_aff.getString("refpro"));
                }
                réponse_aff.close();
            } catch(Exception e){System.out.println(e);}
            System.out.println(contenuliste);
            return contenuliste;
        }
    et
    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
        Object[] select (String refpro){
            Object[] tableau = new Object[5];
            try {
                ResultSet réponse = requete.executeQuery("select npro, refpro, libelle, prix, qstock from produit where refpro like '" + refpro + "'");
                réponse.beforeFirst();
                réponse.next();
                tableau[0] = réponse.getString("npro");
                tableau[1] = réponse.getString("refpro");
                tableau[2] = réponse.getString("libelle");
                tableau[3] = réponse.getString("prix");
                tableau[4] = réponse.getString("qstock");
                réponse.close();
            } catch(Exception e){System.out.println(e);}
            return tableau;
        }
    voici l'erreur :
    org.postgresql.util.PSQLException: L'opération nécessite un scrollable ResultSet, mais ce ResultSet est FORWARD_ONLY.
    []

    par contre
    je ne uis même pas sur que l'erreur vient de là
    il ne faudrait pas juste désselectionner la liste à la sélection de la liste avant de réécrir la liste ?

    le truc que je comprend pas c'est pourquoi si je rafraichi la liste sans sélectionner, le code ne passe pas dans le code de sélection
    tandit que si je sélectionne un truc et ensuite je rafraichis, là il passe dans le code de sélection

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par défaut
    D'après la première erreur, il s'agirait d'un ResultSet mal positionné.
    Tu peux essayer de "déselctionner" ta liste mais si le ResultSet en amont n'est pas fermé ou dans les choux sur un même objet, l'erreur se reproduira.

    Pour identifier si cela vient bien du ResultSet (ce que je crois), modifie ta méthode select () en mettant en dur une liste d'objets sans passer par un ResultSet, cela permettra d'identifier un peu mieux le problème.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 23
    Par défaut
    je début pas mal dans java
    et la méthode resultset est la seule que je connaisse pour sélectionner dans une DB

    mais déjà dans mon dernier message j'ai sans doute fait des erreurs pour ajouter le
    réponse.beforeFirst(); et le réponse.close();
    donc éjà sauriez vous m'éclairer un peu plus sur le code, pour le requète par rapport à ce que j'ai écrit au dernier message

Discussions similaires

  1. Problem dans une select List en ASP MVC4
    Par napi15 dans le forum ASP.NET MVC
    Réponses: 4
    Dernier message: 11/07/2013, 18h42
  2. probleme d'update sur une liste de selection
    Par kyryan dans le forum Hibernate
    Réponses: 0
    Dernier message: 29/02/2012, 15h37
  3. [AJAX] Select list et selected value
    Par Polymorph dans le forum AJAX
    Réponses: 10
    Dernier message: 14/10/2009, 11h18
  4. largeur liste de selection
    Par Anonymous dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 26/09/2004, 17h57
  5. [langage] probleme avec les listes dans des listes
    Par pqmoltonel dans le forum Langage
    Réponses: 7
    Dernier message: 27/04/2004, 12h32

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