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

 Java Discussion :

Affichage base de données dans un JTable


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 3
    Par défaut Affichage base de données dans un JTable
    Bonjour,

    Je suis en train de développer un mini logiciel pour m’entraîner sur le langage Java. Après avoir beau chercher sur le net je ne trouve pas la solution à mon problème.
    J'ai une base de donnée avec des éléments inséré grâce à un formulaire. Je voudrais savoir s'il y a un moyen d'afficher ces éléments de la bdd sous forme de JTable dans ma fenêtre en Swing ? Et si oui comment ?

    Je vous remercie de votre réponse !

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Il suffit de faire une requête pour récupérer les éléments, de parcourir le résultat de cette requête et d'ajouter chaque ligne à la JTable.

    Pour faire des requêtes voir JDBC. Pour les tutoriels sur la JTable, voir http://baptiste-wicht.developpez.com.../swing/jtable/, http://thierry-leriche-dessirier.dev...lemodel-5-min/ et http://nicolas-zozol.developpez.com/...l/java/jtable/..
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 3
    Par défaut
    Bonjour merci de ta réponse
    Après avoir essayé plusieurs tentative, je suis arrivé à ce 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
     
                 try
    		{
    			Class.forName("com.mysql.jdbc.Driver");
    			Connection conn = DriverManager.getConnection(url, user, passwd);			
     
    			Statement state = conn.createStatement();
     
    			ResultSet rs = state.executeQuery("SELECT * FROM ancestor");
    			ResultSetMetaData resultMeta = rs.getMetaData();
     
    			JTable table;
    			while(rs.next())
    			{
    				for (int i = 1; i <= resultMeta.getColumnCount(); i++)
    				{
    					table = new JTable(resultMeta.getColumnName(i), rs.getObject(i));
    				}
    			}
     
    		}
    		catch (Exception e)
    		{
    			e.printStackTrace();
    			System.out.println("Error");
    		}
    Malheureusement il ne veut pas de la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     table = new JTable(resultMeta.getColumnName(i), rs.getObject(i));
    Je pense ne pas en être loin mais je ne vois pas...

    Si quelqu'un pourrait m'aider ça serait super

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while(rs.next())
    			{
    				for (int i = 1; i <= resultMeta.getColumnCount(); i++)
    				{
    					table = new JTable(resultMeta.getColumnName(i), rs.getObject(i));
    				}
    			}
    Ta boucle fait :
    1. pour chaque enregistrement trouvé dans le resultset
      1. pour chaque colonne

      1. essaye de créer une JTable telle que la valeur soit un nom de colonne, et le nom de colonne soit la donnée de la colonne dans l'enregistrement (s'il existait un constructeur de type JTable(String title, Object value), ou JTable(Object, Object), tu te retrouverais bien avec une seule JTable avec une ligne d'une colonne dont le titre est la valeur et la valeur le nom de la colonne !)


    L'idée est bien là, mais il faut que tu cumules
    1. d'une part les noms de colonnes dans un tableau de String (ou d'Object)
    2. d'autre part les valeurs dans un tableau à 2 dimensions d'Object

    Bien sûr, comme tu ne connais pas d'avance (c'est possible en modifiant la requête, mais partons du principe que non), tu ne peux pas directement construire un tableau pour les valeurs. On pourrait utiliser l'alternative du constructeur qui admet des Vector en paramètres, mais il vaut mieux en général éviter cette classe obsolète.

    Tu connais le nombre de colonnes, donc il est facile de créer le tableau de colonnes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    String[] columnNames = new String[resultMeta.getColumnCount()];
    for (int i = 1; i <= resultMeta.getColumnCount(); i++){   
        columnNames[i-1]=resultMeta.getColumnName(i);
    }
    Pour le tableau de données, tu peux créer une Arraylist puis la convertir en tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    List<Object[]> data = new ArrayList<>();
    while(rs.next()) {
        Object[] line = new Object[resultMeta.getColumnCount()]; // on créé un tableau pour stocker la ligne courante
        for (int i = 1; i <= resultMeta.getColumnCount(); i++) {
               line[i-1]=rs.getObject(i);          
        }
        data.add(line); // on ajoute la ligne à la liste
    }
    table = new JTable( data.stream().toArray(Object[][]::new), columnNames ); // on convertit la liste en tableau pour appeler le constructeur et créer une seule JTable
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 3
    Par défaut
    Merci de vos réponses ! J'ai réussi je mets le sujet en résolu.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/03/2012, 15h57
  2. Réponses: 1
    Dernier message: 20/03/2012, 10h37
  3. [MySQL] Affichage des données d'une base de données dans un tableau
    Par valmeras dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 02/02/2012, 21h14
  4. Affichage des données d'une base de données dans un formpanel
    Par DiverSIG dans le forum Ext JS / Sencha
    Réponses: 2
    Dernier message: 29/09/2011, 00h01
  5. Réponses: 1
    Dernier message: 07/05/2010, 11h09

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