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 :

recuperer les noms des tables


Sujet :

JDBC Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 11
    Points : 6
    Points
    6
    Par défaut recuperer les noms des tables
    Bonjour

    je developpe un explorateur de base de donnés
    je travaille avec une base acces
    j'ai commencé avec pas tros des connaissances en JDBC mais maintenant
    je suis capable de realiser la connection avec la base et d'afficher les resultats des mes requettes sql dans un a jtables
    mais j'ai un soucis
    je veux recuperer les noms des tables pour les lister dans un combobox
    mais je narrive pas à realiser ça ;
    voilà j'ai cette fonction pour remplir un vecteur tname avec les noms des tables

    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
     
    public void infos()
    	{
    		Vector tname = new Vector();
    		try {
    		DatabaseMetaData dma = connection.getMetaData();
     
    		ResultSet results = dma.getTables(connection.getCatalo(),
    		null, "%", null);
    		}
    		catch (Exception e) {System.out.println(e);}
    		while (results.hasMoreElements())
    		tname.addElement(
    		results.getColumnValue("TABLE_NAME"));
    	}
    mais toujours le message d'erreur

    The method hasMoreElements() is undefined for the type ResultSet
    pour while (results.hasMoreElements())

    et method getColumnValue(String) is undefined for the type ResultSet
    pour tname.addElement(
    results.getColumnValue("TABLE_NAME"));


    Une solution pour résoudre ce soucis ?

    Merci

  2. #2
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    Bonjour,
    Je pense que le fait d'utiliser des méthodes qui n'existe pas dans la classe ResultSet ne plait pas trop et est donc l'explication de ses messages d'erreurs.
    Deja l'utilisation de Vector n'est pas forcement un choix judicieux, ref FAQ:
    http://java.developpez.com/faq/java/...IONS_info_list

    sinon, a mon avis, il faudrait remplacer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while (results.hasMoreElements())
     tname.addElement(results.getColumnValue("TABLE_NAME"));
    par cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while (results.next())
     tname.addElement(results.getString("TABLE_NAME"));
    Bien sur, je n'ai pas tester mais ca me semble plus juste. A vérifier.

    Bonne chance

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    merci zorm

    j'ai fait comme vous m'avez indiqué
    mnt je n'ai pas ces message d'erreurs
    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
     
    public void infos()
    	{
     
    		try {
    		DatabaseMetaData dma = connection.getMetaData();
     
    		ResultSet results = dma.getTables(connection.getCatalo(),
    		null, "%", null);
    		}
    		catch (Exception e) {System.out.println(e);}
    		try{
    			int i = 0;
    			while (results.next())
     
    				tname[i]=
    				results.getString("TABLE_NAME");
    			i++;
    		}
    		catch(Exception wh)
    		{
    			System.out.println("erreur lors de remplissage de tname");
    		}
    		for(int i =0;i<tname.length;i++)
    			System.out.println(tname[i]);	
    	}
    et j'ai utilsé aussi un tableau tname au lieu d'un vecteur

    le probleme est que je n'arrive pas à extraire les noms
    et j'ai toujours le message d'erreur que j'ai indiqué dans
    {
    System.out.println("erreur lors de remplisage de tname");
    }

    et pour for(int i =0;i<tname.length;i++)
    System.out.println(tname[i]);
    }
    je n'ai que des null !!

  4. #4
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    Bonsoir,

    A mon avis, il va falloir s'inspirer de ce qui est fait dans la FAQ ici:
    http://java.developpez.com/faq/jdbc/...bles#nomTables

    Sinon dans votre code, je conseillerai deja de modifier par ce qui est en gras;
    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
    public String[] infos(){
            String[] tname = new String[];
            try {
            DatabaseMetaData dma = connection.getMetaData();        
            ResultSet results = dma.getTables(connection.getCatalog(),
            null, "%", null);
            }catch (Exception e) {System.out.println(e);}
            try{
                int i = 0;
                while (results.next()){                
                    tname[i]=results.getString("TABLE_NAME");
                    i++;
                }
            }
            catch(Exception wh)
            {
                System.out.println("erreur lors de remplissage de tname");
            }
            for(int i =0;i<tname.length;i++)
                System.out.println(tname[i]);   
        return tname; 
        }
    Bonne chance

  5. #5
    Futur Membre du Club
    Inscrit en
    Février 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Vraiment un grand merci Zorm
    je vais essayer tous ça et merci encore pour l'aide

  6. #6
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Salut,

    Il me semble que lorsqu’on construit un tableau on doit lui donner une taille,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Donc String[] tname = new String[10];
    Car si tu ne lui donne pas de taille, tu ne sauras pas y ajouter des données.

    Je te propose d’utilise les collections donc ici une List de java.util.List.

    Tu ne dois pas donner de taille quand tu la construis, elle grandit a fur et a mesure que tu la remplis et ici sont utilisation est plus propice car tu ne connais pas a l’avance le nombre de table.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Donc tu fais List<String> tname = new ArrayList<String>() ;
    Et pour la remplir tu fais tname.add() ;

    Et tu retourne une Liste<String>.

    C’est plus propre et c’est la norme de java 5.

    Donc dans ton 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
     
    public List<String> infos(){
            List<String> tname = new ArrayList<String>();
     
    ....
     
    try{
     
                while (results.next()){                
                    tname.add(results.getString("TABLE_NAME"));
                }
            }
            catch(Exception wh)
            {
                System.out.println("erreur lors de remplissage de tname");
            }
     
    for(int i =0;i<tname.size();i++)
                System.out.println(tname.get(i));
    Voila J’espère que cela fonctionne maintenant.
    LeSnul.

  7. #7
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    Certes, c'est pas faux, j'avais pas testé et fais ca de memoire pour le tableau. Mais c'est vrai qu'il vaut mieux utiliser les List, Map ...

Discussions similaires

  1. récupération du nom des tables
    Par romram dans le forum Access
    Réponses: 2
    Dernier message: 06/12/2006, 15h16
  2. Réponses: 4
    Dernier message: 10/05/2006, 19h40
  3. [MySQL] Comment connaître les noms des tables existantes
    Par Cygnus Saint dans le forum Langage SQL
    Réponses: 7
    Dernier message: 16/03/2006, 21h26
  4. comment recuperer les noms de table de sa BDD ?
    Par toony.m dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 16/03/2006, 20h03
  5. Réponses: 2
    Dernier message: 03/02/2005, 14h21

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