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 :

comment afficher un tableau Jtable d'image BLOB depuis la base de données


Sujet :

JDBC Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2019
    Messages : 6
    Points : 1
    Points
    1
    Par défaut comment afficher un tableau Jtable d'image BLOB depuis la base de données
    Bonjour j'ai un problème au niveau d'affichage des images enregistré dans la BDD.
    J'ai cette errer au niveau de l'execution : java.lang.NullPointerException





    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
    public void afficher(){
           // byte[] fileBytes;
            byte[] imgData = null ;
            DefaultTableModel model = new DefaultTableModel();
           model.addColumn("IMAGE_ID");
           model.addColumn("IMAGE_NAME");
           model.addColumn("IMAGE_DATA");
     
            //Blob img ;
       // byte[] imgData = null ;
     
     
           String requetteaffiche="SELECT * FROM saved_image ";
            try {
               st=maconnexion.obtenir().createStatement();
                ResultSet resultat=st.executeQuery(requetteaffiche);
     
                while (resultat.next()) {
                    String id = rs.getString(0);
                     String name=rs.getString(1);
                                Blob blob = rs.getBlob(2);
                     ImageIcon icon = null;
                     InputStream is = blob.getBinaryStream();
                     BufferedImage img = ImageIO.read(is);
                     icon = new ImageIcon(img);
     
     
     
                     model.addRow(new Object[]{resultat.getString("IMAGE_ID"),icon});
     
                }
     
            } catch (Exception e) {
                System.out.println(e);
            }
            jtable.setModel(model);
     
        }

  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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Au lieu de System.out.println(e);, faire :

    Comme ça tu auras la ligne où se passe l'exception.
    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
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2019
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    voila ce que ça donne : en remplaçant le System.out.println(e)
    Images attachées Images attachées  

  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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Et c'est quoi le code de la ligne 60 ?

    (Tu pouvais copier la stacktrace en texte plutôt qu'en image)
    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
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2019
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.sql.Blob blob = rs.getBlob(2);
    java.lang.NullPointerException
    at selector.display.afficher(display.java:60)
    at selector.display.<init>(display.java:32)
    at selector.display$1.run(display.java:154)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

  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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Hum, c'est étrange. Parce que la seule manière d'obtenir une NullPointerException sur cette ligne, c'est d'avoir rs null. Et si rs est null, alors on devrait avoir une NullPointerException avant, sur cette ligne rs.getString(0);.

    Mais avec cette info, le problème est évident. Il aurait dû nous sauter aux yeux avant, à la première lecture.

    Ce code montre que tu récupères la réponse de l'exécution de la requête dans la variable resultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ResultSet resultat=st.executeQuery(requetteaffiche);
     
                while (resultat.next()) {
    Donc, chercher à lire chaque colonne dans la variable rs n'a aucun sens et il est probable que cette variable ne soit même pas initialisée, d'où la NullPointerException.


    PS:
    1. Il est indispensable de libérer les ressources allouées par la création de statement ou de resultset (utilisation d'un try-with-resources)
    2. Il est préférable d'exécuter la partie requête dans un thread différent de celui de l'UI, pur éviter de la geler pendant l'opération, ce que tu pourras faire avec un SwingWorker
    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.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2019
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    concernant le rs je récupére d'une manière ordinaire les champs IMAGE_ID et IMAGE_NAME.
    mais mon problème c'est au niveau des images stocké dans la base en format BLOB
    Images attachées Images attachées  

  8. #8
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Non.

    Si tu récupères le résultat d'une requête dans une variable de type ResultSet et que tu boucles sur ce résultat, alors il faut récupérer les colonnes sur ce résultat et pas celui d'un autre resultset résultat d'une autre requête. Et le fait qu'une autre requête, fonctionne n'est pas pertinent pour résoudre le problème sur cette requête-là, ni l'exécution de n'importe quelle autre méthode d'ailleurs. Un moyen d'éviter ce genre d'erreur est de ne pas déclarer les variables de type Statement ou ResultSet en variable de classe, ce qui n'a aucun sens ni intérêt, et surtout peu favoriser grandement des dysfonctionnements (exécution stateful).
    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.

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2019
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    OK je récupére le résultat de chaque colonne. mais mon but c'est d'afficher les images sur le jTable chose que je n'arrive pas a le faire

  10. #10
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Récupère les colonnes dans la variable resultat, pas rs :

    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
    try(Statement st=maconnexion.obtenir().createStatement()) {
        ResultSet resultat=st.executeQuery(requetteaffiche);
     
        while (resultat.next()) { 
            Blob blob = resultat.getBlob(2) ;
                     
            InputStream is = blob.getBinaryStream();
            BufferedImage img = ImageIO.read(is);
            ImageIcon icon  = new ImageIcon(img);
     
            model.addRow(new Object[]{resultat.getString(0),resultat.getString(1) , icon});
        }
    } catch (Exception e) {
                e.printStackTrace();
    }
    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.

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2019
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    je te remerci joel.drigo!! j'ai plus l'erreur
    mais toujours est il j'ai toujours pas d'image
    Images attachées Images attachées  

  12. #12
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Il faut installer un renderer spécial (TableCellRenderer), parce que par défaut le renderer utilise un toString() pour faire un rendu de type texte.

    Tu peux commencer par essayer le renderer par défaut fourni par Java pour ImageIcon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    jtable.getColumnModel().getColumn(2) // on récupère le modèle de la colonne d'index 2
    		.setCellRenderer(jtable.getDefaultRenderer(ImageIcon.class)); // on y installer le renderer correspondant à ImageIcon, la classe que tu utilises pour afficher les images
    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. Réponses: 0
    Dernier message: 14/03/2013, 21h41
  2. Réponses: 0
    Dernier message: 14/03/2013, 03h42
  3. Gestion d'une table de base de données avec JCombox
    Par cotede2 dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 29/10/2009, 16h25
  4. afficher une ligne précise d'une table de base de donnée MySql
    Par developppez dans le forum Windows Forms
    Réponses: 19
    Dernier message: 15/01/2009, 23h14

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