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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé 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 : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    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
    Par défaut
    Tu fais sûrement un close sur le ResultSet dans executeRequeteAndGetResults.

  3. #3
    Membre éclairé 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 : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    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
    Par défaut
    Ah ben ouais tu fermes la connection, c'est pire !

  5. #5
    Membre éclairé 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 : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    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
    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).

+ 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