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 :

SQLException: Instruction fermée: getMetaData


Sujet :

JDBC Java

  1. #1
    Membre actif Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Points : 229
    Points
    229
    Par défaut SQLException: Instruction fermée: getMetaData
    Salut à tous,

    Pourriez-vous me dire à quoi est due cette erreur?

    Merci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    java.sql.SQLException: Instruction fermée: getMetaData
            at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
            at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
            at oracle.jdbc.driver.OracleResultSetImpl.getMetaData(OracleResultSetImpl.java:128)
            at cerbere.dao.pojo.DAO_Applications.getListApplication(DAO_Applications.java:44)
            at cerbere.bo.pojo.BO_Applications.getListApplications(BO_Applications.java:18)
    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
     
    Vector listeApplications = new Vector();
            String requete = 
                    "select AP#***, AP#***, AP#*** " +
                    "from AP#*** " +
                    "order by AP#***";
    try {
                resultSet = bdd.executeRequeteAndGetResults(requete);
     
                resultSetMetaData = resultSet.getMetaData(); /*<==Ligne de l'erreur*/
                int columnCount = resultSetMetaData.getColumnCount();
     
                while (resultSet.next()) {
                    String[] ligne = new String[columnCount];
                    for (int i = 0; i < columnCount; i++) {
                        ligne[i] = resultSet.getString(i + 1);
                    }
                    listeApplications.add(ligne);
                }
            } catch (SQLException e) {
                JOptionPane.showMessageDialog(null, "N'a pas pu récupérer la liste des applications\n" + e.getMessage(), "Erreur" , JOptionPane.OK_OPTION);
                e.printStackTrace();
            }

  2. #2
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Tu fais sûrement un close sur le ResultSet dans executeRequeteAndGetResults.
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  3. #3
    Membre actif Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Points : 229
    Points
    229
    Par défaut
    A vrai dire, non et c'est ça qui me surprends.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    /**
         * Execute la requête et renvoie le resulSet
         * @param requete
         * @return
         */
        public ResultSet executeRequeteAndGetResults(String requete) throws SQLException {
            this.ouvre();
            Statement stmt = connexion.createStatement();           
            ResultSet resultSet = stmt.executeQuery(requete);
            this.ferme();
            System.out.println("Requête executée avec succès : \n" + requete);
            return resultSet;
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private Connection connexion;
    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
    private void ouvre() throws SQLException {
           if (this.properties == null) System.out.println("Properties null");
           String paramAdress = this.properties.getParametres("parametreOracle.connexion.adresse");
           String paramUser = properties.getParametres("parametreOracle.connexion.utilisateur");
           String paramPass = properties.getParametres("parametreOracle.connexion.passe");
     
           DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
           connexion = DriverManager.getConnection(paramAdress, paramUser, paramPass);
           System.out.println("Connecté à la base avec succès.");
        }
     
        private void ferme() throws SQLException {
            connexion.close();
            System.out.println("Fermeture de la base avec succès.");
        }

  4. #4
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Ah ben ouais tu fermes la connection, c'est pire !
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  5. #5
    Membre actif Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Points : 229
    Points
    229
    Par défaut
    Ah! Je pensais que le ResultSet était indépendant de la connexion. Donc il faudrait que je fasse ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /**
         * Execute la requête et renvoie le resulSet
         * @param requete
         * @return
         */
        public ResultSet executeRequeteAndGetResults(String requete) throws SQLException {
            this.ouvre();
            Statement stmt = connexion.createStatement();           
            ResultSet resultSet = stmt.executeQuery(requete);
            System.out.println("Requête executée avec succès : \n" + requete);
            return resultSet;
        }
    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
     Vector listeApplications = new Vector();
            String requete = 
                    "select AP#***, AP#***, AP#*** " +
                    "from AP#*** " +
                    "order by AP#***";
    try {
                resultSet = bdd.executeRequeteAndGetResults(requete);
     
                resultSetMetaData = resultSet.getMetaData(); /*<==Ligne de l'erreur*/
                int columnCount = resultSetMetaData.getColumnCount();
     
                while (resultSet.next()) {
                    String[] ligne = new String[columnCount];
                    for (int i = 0; i < columnCount; i++) {
                        ligne[i] = resultSet.getString(i + 1);
                    }
                    listeApplications.add(ligne);
                }
            } catch (SQLException e) {
                JOptionPane.showMessageDialog(null, "N'a pas pu récupérer la liste des applications\n" + e.getMessage(), "Erreur" , JOptionPane.OK_OPTION);
                e.printStackTrace();
            } finally {
    bdd.ferme();
    }
    Il n'y aurait pas un truc à lire sur le sujet? Pour en savoir plus.

    Merci.

  6. #6
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Mouais, je sortirais aussi le "ouvre". Par exemple tu pourrais vouloir exécuter plusieurs requêtes sur la même connection (gain de perfs et possibilité de faire un rollback/commit global par exemple).
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  7. #7
    Membre actif Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Points : 229
    Points
    229
    Par défaut
    Citation Envoyé par Natha
    Mouais, je sortirais aussi le "ouvre".
    C'est déjà fait. (Mais certes pas posté).

    Citation Envoyé par natha Voir le message
    Par exemple tu pourrais vouloir exécuter plusieurs requêtes sur la même connection (gain de perfs et possibilité de faire un rollback/commit global par exemple).
    Ah super, ça me donne une idée! Merci!

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 03/03/2009, 15h15
  2. java.sql.SQLException: Le flux de données est déjà fermé
    Par cyberny dans le forum Interfaces de programmation
    Réponses: 2
    Dernier message: 03/03/2009, 14h19
  3. [Dev-Pascal] Mon programme se ferme trop vite après la dernière instruction
    Par am002r dans le forum Autres IDE
    Réponses: 4
    Dernier message: 08/05/2007, 10h25
  4. [Crystal Report][VB6] instruction PrintReport
    Par yyyeeeaaahhh dans le forum SDK
    Réponses: 4
    Dernier message: 29/07/2002, 14h58
  5. [TASM] Problème concernant l'instruction LGDT
    Par Ninkosen dans le forum Assembleur
    Réponses: 3
    Dernier message: 15/07/2002, 19h09

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