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

Composants Java Discussion :

JTable et Base de données


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 110
    Par défaut JTable et Base de données
    Bonjour,

    J'utilise une Base de Donnée Access.
    Je cherche à afficher 2 colonnes de ma base de donnée dans une Jtable.
    J'ai bien réussi à créer deux colonnes mais je n'obtiens qu'une seule ligne.

    Comment puis-je faire pour obtenir toutes mes lignes ?

    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
     try{
                cnx = connecterDB();
                st=cnx.createStatement();
                rst=st.executeQuery("SELECT * FROM TAB_ANIMALI");
     
                while(rst.next()){
                   jTable1.setModel(new javax.swing.table.DefaultTableModel(
                        new Object [][] {
                            {rst.getString("NOME_ANIMALI"),rst.getObject("IMAGE_FILE")},
                        },
                        new String [] {
                            "NAME", "IMAGE_FILE"
                        }
                    ));
                }
                rst.close();
                st.close();
                cnx.close();
            }
            catch (Exception err) {
                System.out.println( "Error: " + err );
            }
    Pièce jointe 219298

    Merci beaucoup :)
    Images attachées Images attachées  

  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 : 55
    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,

    Le problème est dans ta boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     while(rst.next()){
                   jTable1.setModel(new javax.swing.table.DefaultTableModel(
                        new Object [][] {
                            {rst.getString("NOME_ANIMALI"),rst.getObject("IMAGE_FILE")},
                        },
                        new String [] {
                            "NAME", "IMAGE_FILE"
                        }
                    ));
                }
    Ce que ça fait :

    Code pseudocode : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    pour chaque enregistrement du résultat
        mettre cet enregistrement dans un nouveau modèle
        affecter le modèle à la jtable
    fin pour

    Alors qu'il faudrait :

    Code pseudocode : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    créer un nouveau modèle
    pour chaque enregistrement du résultat
        mettre (=ajouter à ceux déjà présents) cet enregistrement dans le modèle
    fin pour
    affecter le modèle à la 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
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 110
    Par défaut
    Merci beaucoup

    Alors j'ai un peu de mal, j'utilise en fait le mode DESIGNER de NetBeans et j'ai donc créé une JTable qui m'a généré 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
    jTable1.setModel(new javax.swing.table.DefaultTableModel(
                new Object [][] {
                    {null, null},
                    {null, null},
                    {null, null},
                    {null, null},
                    {null, null},
                    {null, null},
                    {null, null},
                    {null, null},
                    {null, null},
                    {null, null},
                    {null, null},
                    {null, null},
                    {null, null}
                },
                new String [] {
                    "NAME", "IMAGE_FILE"
                }
            ));
            jScrollPane2.setViewportView(jTable1);
    C'est avec ça que j'ai adapter mon code

    Ducoup je ne sais pas trop comment retranscrire le pseudocode que vous m'avez donné ?
    Pouvez-vous me donner un petit coup de pouce s ça ne vous embete pas ?

    Mercii

  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 : 55
    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
    8
    9
    10
    11
    12
    DefaultTableModel model = new DefaultTableModel(
                    new String [] {
                        "NAME", "IMAGE_FILE"
                    }
                    ,0
                );
     
    		while(rst.next()){
    			model.addRow(new Object [] {rst.getString("NOME_ANIMALI"),rst.getObject("IMAGE_FILE")});
    		}
     
            jTable1.setModel(model);
    Accessoirement, pour bien fermer tes ressources :

    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
     
    try(Connection cnx = connecterDB();
         Statement st=cnx.createStatement();
         ResultSet rst=st.executeQuery("SELECT * FROM TAB_ANIMALI")) {
     
     
         DefaultTableModel model = new DefaultTableModel(
                    new String [] {
                        "NAME", "IMAGE_FILE"
                    }
                    ,0
                );
     
    		while(rst.next()){
    			model.addRow(new Object [] {rst.getString("NOME_ANIMALI"),rst.getObject("IMAGE_FILE")});
    		}
     
            jTable1.setModel(model);
     
    }
    ou, si la connexion vient d'un pool :


    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
     
    Connection cnx = pool.get();
    try(
         Statement st=cnx.createStatement();
         ResultSet rst=st.executeQuery("SELECT * FROM TAB_ANIMALI")) {
     
     
         DefaultTableModel model = new DefaultTableModel(
                    new String [] {
                        "NAME", "IMAGE_FILE"
                    }
                    ,0
                );
     
    		while(rst.next()){
    			model.addRow(new Object [] {rst.getString("NOME_ANIMALI"),rst.getObject("IMAGE_FILE")});
    		}
     
            jTable1.setModel(model);
     
    }
    finally {
     
        pool.release(cnx);
    }
    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
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 110
    Par défaut
    Ah super merci

    je n'avais pas bien saisi cette notion de model.

    Je créé mon model (vide), je fais comme d'habitude pour selectionner mes colonnes sauf que j'utilise model.addRow pour mettre a jour

    Merci beaucoup

    Une dernière chose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rst.getObject("IMAGE_FILE")
    IMAGE_FILE dans ma Base de données Access est de type " Objet OLE" j'utilise getObject mais ça ne me donne pas le résultat voulu
    voici ce que j'obtiens :

    Nom : Capture.JPG
Affichages : 114
Taille : 18,8 Ko

  6. #6
    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 : 55
    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
    Ok, comme c'est un objet, tu obtiens un tableau d'octets. Par défaut les propriétés dans une JTable sont converties en String pour être affichées. Ce que tu vois c'est la réprésentation String du tableau d'octets.

    Je suppose que tu veux afficher l'image correspondante. Pour pouvoir faire ça, il va falloir que tu fasses déjà un TableCellRenderer adapté.

    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
     
    // ici une version basique de renderer qui affiche une image dans sa taille d'origine, sans aucun style particulier (pas de centrage par exemple)
    TableCellRenderer cellRenderer = new DefaultTableCellRenderer() {
     
            	@Override
            	protected void setValue(Object value) { 
            		if ( value instanceof byte[] ) {
            			setIcon(convertToimage((byte[])value));
            		}
                            else {
                                   setIcon(null);
                            }
            		super.setValue("");
            	}
     
    		private Icon convertToimage(byte[] value) {
    				/**...**/
    		} 
     
            };
     
    jTable1.getColumnModel().getColumn(1).setCellRenderer(cellRenderer); // pour affecter le renderer à la seconde colonne
    Reste à écrire la méthode qui convertit un tableau d'octets au format OLE en image Java, pour la convertir en ImageIcon (Voir ici).
    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.

Discussions similaires

  1. Insertion jTable et Base de données problème
    Par Ercan67000 dans le forum Composants
    Réponses: 3
    Dernier message: 24/01/2012, 14h30
  2. Réponses: 5
    Dernier message: 03/08/2009, 15h40
  3. jtable et base de données?
    Par 7rouz dans le forum Composants
    Réponses: 2
    Dernier message: 27/07/2009, 09h41
  4. JTable avec base de donnée
    Par grospatapouf dans le forum Composants
    Réponses: 4
    Dernier message: 06/09/2008, 18h10
  5. jtable et base de donnée acess
    Par lilmo dans le forum Composants
    Réponses: 8
    Dernier message: 23/12/2006, 00h15

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