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 :

Obtenir des infos sur les tables d'une base de données


Sujet :

JDBC Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 72
    Points : 37
    Points
    37
    Par défaut Obtenir des infos sur les tables d'une base de données
    Bonjour à tous,
    j'ai essayer d'appliquer le code inscrit dans la faq jdbc pour afficher la liste des tables d'une base de données mais ça ne marche pas.
    voici la classe java :
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    /*
     * Créé le 26 déc. 2008
     *
     */
     
     
    import java.sql.*;
    import java.util.*;
     
    public class DFInfoBD {
     
        private Connection inf_con;
     
        public DFInfoBD(Connection con){
            inf_con=con;
        }
     
        /* Renvoi la liste des tables de la BD*/
        public List getListeTables() throws Exception{
            List tables=null; String[] typeTables={"TABLE"};
            tables.clear();
     
            //on récupère les métadonnées à partir de la connexion
            DatabaseMetaData dmd = inf_con.getMetaData();
            //récupération des informations
            ResultSet rsTables = dmd.getTables(inf_con.getCatalog(),null,"%",typeTables);
            //affichage des informations
            while(rsTables.next()){
               for(int i=0; i<rsTables.getMetaData().getColumnCount();i++){
                  //String nomColonne = rsTables.getMetaData().getColumnName(i+1);
                  //Object valeurColonne = rsTables.getObject(i+1);
                  tables.add(rsTables.getMetaData().getColumnName(i+1));
                  //System.out.println(nomColonne+" = "+valeurColonne);
               }
            }
            return tables;
        }
     
     
        /*** GETTERS ***/
        public Connection getInfoCon(){ return this.inf_con;}
        /***  SETTERS ***/
        public void setInfoCon(Connection con){this.inf_con=con;}
     
     
        public static void main(String[] args) {
     
    	    try{
    	        Class.forName("com.mysql.jdbc.Driver");
    	        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "francis", "dfrancis");
    	        System.out.println("Connexion effectuée avec succès.");
    	        DFInfoBD info = new DFInfoBD(con);
    	        List lesTables = info.getListeTables();
    	        System.out.println("Bon");
    	        if(lesTables!=null){
    	            for(int i=1; i<=lesTables.size(); i++){
    	                System.out.println(lesTables.get(i).toString());
    	            }
    	        }
    	        con.close();
    	    } catch(Exception e){
    	        System.err.print("An error has occured : "+e.getMessage());
    	    }
     
        }
    }
    et voici l'erreur retournée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Connexion effectuée avec succès.
    An error has occured : null
    c'est koi le problème à votre avis ? Tout a pourtant l'air nikel.

  2. #2
    Membre chevronné Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Points : 2 232
    Points
    2 232
    Par défaut
    Dans le catch de ton main ajoute cette instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    e.printStackTrace();
    pour avoir plus d'infos sur l'erreur.

  3. #3
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut Solution :
    Dans votre méthode de récupération de la liste des tables, déclarer tables en tant qu'objet List valant null, et enchaîner avec l'invocation d'une méthode clear en faisant tables.clear() alors que ce dernier est null, c'est tout à fait normal de lever un nullPointerException...
    C'est du moins ce que précisera printStackTrace()...
    En effet, chaque invocation de votre péthode crée de toute façon un nouvel objet List null que vous ne pourrez jamais manipuler tant qu'il n'aura pas été instancié concrètement. Je vais jetter un oeil rapide sur les références de l'API java, mais vous devriez tout simplement supprimer la ligne tables.clear(), et instancier conrêtement List lors de la déclaration de tables...
    En fait, j'ai le sentiment que vous désiriez exploiter l'interface java.util.List. Mais on ne peut pas instancier une interface, soit on crée une classe qui l'implémente, soit on exploite une classe existante qui l'implémente. Dans votre cas, l'objet idéal à exploiter à la place de List serait une instance de java.util.Vector, à l'aide de la déclaration suivante : Vector tables = new Vector();
    Plus besoin de faire de clear(), puisque ce dernier est recréé à chaque appel de la méthode, donc vide.
    Il faudra aussi modifier la ligne
    List lesTables = info.getListeTables();
    de votre méthode Main, par
    Vector lesTables = info.getListeTables();
    Rien d'autre, la suite de votre code invoque des méthodes que Vector possède bien, et qui sont d'ailleurs héritées de l'implémentation de l'interface List.

Discussions similaires

  1. Réponses: 0
    Dernier message: 14/11/2010, 16h49
  2. ittération sur les tables d'une base de donnée
    Par romyos dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 22/02/2009, 22h50
  3. Réponses: 1
    Dernier message: 22/04/2008, 21h25
  4. Réponses: 4
    Dernier message: 17/11/2006, 19h35
  5. [Debutant] Lister les tables d'une base de données
    Par Konrad Florczak dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/07/2005, 16h24

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