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 :

Problème ResultSet fermé alors que non


Sujet :

JDBC Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 51
    Points : 55
    Points
    55
    Par défaut Problème ResultSet fermé alors que non
    Bonjour,

    J'ai un problème qui me bloque depuis maintenant quelques heures. Je boucle sur un resultSet pour ressortir tous les résultats. J'utilise deux boucle do while imbriqué, La plus profonde se déroule correctement mais lors du passage à la prochaine itération pour l'autre ResultSet, j'ai une exception qui se lève je ne sais pas pourquoi.

    Voici le code :
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    public void storeVisitorTime(int[] data) throws SQLException {
            modifySequenceTable("visitortime");
            //We select the last id of the simulation
            String query_select_sim = "SELECT id FROM simulation";
            ResultSet res_sim = state.executeQuery(query_select_sim);
            if(res_sim.last()) {
                int id_fk = res_sim.getInt("id"), id_exhibit, id_visitor, id_exhibit_unique;
                String query_select_ex, query_insert, query_select_vis;
                ResultSet res_ex, res_vis;
                PreparedStatement ps;
                //Select the exhibit id
                query_select_ex = "SELECT e.* FROM exhibitentity e, roomentity r, simulation s ";
                query_select_ex += "WHERE e.room_id=r.id AND r.simulation_id=s.id ";
                query_select_ex += "AND s.id="+id_fk;
                res_ex = state.executeQuery(query_select_ex);
                if(res_ex.first()) {
                    do {
                        id_exhibit = res_ex.getInt("id");
                        id_exhibit_unique = res_ex.getInt("exid"); //Select the exhibit id necessary to recory the correct data
                        query_select_vis = "SELECT v.id FROM visitorentity v, simulation s ";
                        query_select_vis += "WHERE v.simulation_id=s.id ";
                        query_select_vis += "AND s.id="+id_fk;
                        res_vis = state.executeQuery(query_select_vis);
                        if (res_vis.first()){
                            do {
                                //Select the visitor id
                                id_visitor = res_vis.getInt("id");  
                                query_insert = "INSERT INTO visitortime (visitor_id, exhibit_id, time_enter) ";
                                query_insert += "VALUES (?,?,?)";
                                ps = conn.prepareStatement(query_insert);
                                ps.setInt(1, id_visitor);
                                ps.setInt(2, id_exhibit);
                                ps.setInt(3, data[id_exhibit_unique]); //Recovery the correct data
                                ps.executeUpdate();
                            } while (res_vis.next()) ;                
                        }
                    }while (res_ex.next()) ;
                }
            }else{
                throw new SQLException("The table simulation haven't row");
            }
        }
    et voici l'exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    May 28, 2014 11:17:59 AM museumsimulator.MuseumSimulator run
    SEVERE: null
    org.postgresql.util.PSQLException: This ResultSet is closed.
    	at org.postgresql.jdbc2.AbstractJdbc2ResultSet.checkClosed(AbstractJdbc2ResultSet.java:2662)
    	at org.postgresql.jdbc2.AbstractJdbc2ResultSet.next(AbstractJdbc2ResultSet.java:1794)
    	at museumsimulator.experimentsMeasurements.StoreData.storeVisitorTime(StoreData.java:546)
    Est-ce que quelqu'un connaitrais la cause svp ?

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Un objet Statement ne peut pas produire plus d'un objet ResultSet à la fois. Chaque fois que tu produis un nouveau ResultSet, le précédent est fermé automatiquement s'il ne l'était pas déjà.

    Personnellement j’extrairais d'abord les données du premier ResultSet, et je bouclerais ensuite.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 51
    Points : 55
    Points
    55
    Par défaut
    Ok je vais tester ça et vous tiens au jus.

    Merci

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 51
    Points : 55
    Points
    55
    Par défaut
    Merci c'est niquel avec les explications que vous m'avez donné. J'ai juste créer un second Statement spécifique pour cette méthode et cela fonctionne très bien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD17] GDS : extraction pour test alors que non
    Par michel.souris dans le forum WinDev
    Réponses: 7
    Dernier message: 19/11/2013, 11h19
  2. Réponses: 4
    Dernier message: 18/01/2010, 12h38
  3. base en lecture seule alors que non
    Par loric92 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 24/05/2009, 19h41
  4. disque dur affiché plein alors que non
    Par SandraG dans le forum Composants
    Réponses: 7
    Dernier message: 10/07/2008, 11h56
  5. Pb de duplicate entry alors que non
    Par nicaud dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/10/2007, 23h42

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