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

AWT/Swing Java Discussion :

inserer une image dans MYSQL et récupérer avec JAVA


Sujet :

AWT/Swing Java

  1. #1
    Provisoirement toléré
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Points : 125
    Points
    125
    Par défaut inserer une image dans MYSQL et récupérer avec JAVA
    salut mes amis
    Je suis face à un petit problème et j'ai pas vraiment d'idée pour y remédier
    Je voudrais savoir comment stocker des images dans MYsql et pouvoir les recuperer depuis un code JAVA ,J'aimerai que dans ce résultat s'affiche une image.
    Exemple: ma requète affiche quelques prénoms (Robert, Martin, Eric), je voudrais que leurs photos apparaissent en dessous de leurs noms respectifs.
    un exemple mes amis car pas facile
    et merci de bien vouloir m'aider

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Mars 2007
    Messages : 53
    Points : 63
    Points
    63
    Par défaut
    j'ai pas d'exemple mais pour faire ça il faut que tu stock l'url de ton image dans la bdd (les images seront stocké physiquement sur un ftp)

    ensuite depuis ton appli java, tu utilise JDBC (il doit y avoir un tuto dans le site) pour recuperer les données depuis la bdd, apres tu peux utiliser par exemple le composant JTable de swing pour afficher le tout

  3. #3
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Sinon tu vas un minimum chercher dans les cours de dvp et tu tombes sur ça:

    Utilisation de JDBC pour la gestion d'images en base de données
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  4. #4
    Provisoirement toléré
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Points : 125
    Points
    125
    Par défaut
    merci pour cette information
    voila j'ai créé une table avec deux champs name et img
    CREATE TABLE image (
    name varchar(20) NOT NULL,
    img mediumblob,
    PRIMARY KEY (name)
    );


    et j'ai deux foto sur mon pc et je voulais les insérer dans la table comment je dois faire
    je n'ai pas compris " l'url de ton image dans la bdd (les images seront stocké physiquement sur un ftp)"

  5. #5
    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 : 37
    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
    ce qu'il veut te dire c'est de ne pas mettre l'image en elle même dans ta base mais seulement l'url de l'endroit ou est situé l'image.
    autant l'hiver éclate que l'hétéroclite
    le vrai geek c'est celui qui croit qu'il y a 1024 mètres dans un kilomètre

  6. #6
    Provisoirement toléré
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Points : 125
    Points
    125
    Par défaut
    ce que je comprends inserer par exemple dans la table
    si je tape la requette avec MYSQL
    insert into matable (name,img)values('ulysse','C:\\Documents and Settings\\BE\\Bureau\\a.jpg');
    alors l'url c'est:C:\\Documents and Settings\\BE\\Bureau\\a.jpg ?

  7. #7
    Provisoirement toléré
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Points : 125
    Points
    125
    Par défaut
    salut
    j'ai inséré les images dans la base mysql mais pour charger l'image dans une fenentre plutot récupérer l'image je n'ai aucune idée
    voila la partie qui me permet de récupérer des donnée à partir de la table mais avec les image je n'ai aucune idée
    je cherche à afficher l'image sur JLabel avec des informations conserne la personne
    voila la partie qui affiche des renseignement de la personne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
     String sql="select  * from  allo where id ='"+ tfLogin.getText()+"'";
          ResultSet resultat = instruction.executeQuery(sql);
     
     
         String produit =null;
         while (resultat.next()) {
           produit = resultat.getString("code");
         }
         nomn.setText(produit);

    mais avec l'image aucune idée j'espere que vous m'avez compris

  8. #8
    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 : 37
    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
    Ca dépend ce que tu veux faire avec ton image. Si tu veux la mettre dans une fenetre tu peut utiliser la classe ImageIcon
    autant l'hiver éclate que l'hétéroclite
    le vrai geek c'est celui qui croit qu'il y a 1024 mètres dans un kilomètre

  9. #9
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Relis le tuto que je t'ais passé, il y a tout ce qu'il te faut
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  10. #10
    Provisoirement toléré
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Points : 125
    Points
    125
    Par défaut
    voila j'ai essayé d'afficher l'image de ma base MYSQL sur la fenetre mais je n'ai rien sur ma fenetre
    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
     
     
    package aa;
    import javax.swing.*;
    import java.awt.*;
    import java.io.*;
    import java.lang.*;
    import java.sql.*;
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.Insets;
    import javax.swing.JLabel;
    import java.awt.Dimension;
     
     
    public class SimpleFenetre extends JFrame   {
     
     
    private JLabel photo= null;
     
     
      private GridBagLayout gbl = new GridBagLayout();
      private JLabel lbLogin = new JLabel("Login : ");
     
      public SimpleFenetre() {
     
     
        this.getContentPane().setLayout(gbl);
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.fill = GridBagConstraints.NONE;
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.insets = new Insets(0, 0, 300, 250);
        BufferedInputStream is = null;
                              Connection conn = null;
                              String url = "jdbc:mysql://localhost/test";
                              String userName = "root";
                              String password = "1Sqa5";
     
                              try {
                 Class.forName("org.gjt.mm.mysql.Driver");
                 conn = DriverManager.getConnection(url, userName, password);
                 Statement instruction = conn.createStatement();
                 String sql="SELECT img FROM image WHERE name = 'ulysse'";
     
                  ResultSet resultat = instruction.executeQuery(sql);
     
                  resultat.next();
                   Blob blob = resultat.getBlob("img");
                   ImageIcon icon = new ImageIcon(blob.getBytes(1, (int)blob.length()));
                   photo = new JLabel(icon);
                   gbl.setConstraints(this.photo, gbc);
     
           this.getContentPane().add(this.photo);
     
                 }
                              catch (ClassNotFoundException ex) {
                                JOptionPane.showMessageDialog(null,
                                                              "Classe introuvable" + ex.getMessage());
                              }
                              catch (SQLException ex) {
                                JOptionPane.showMessageDialog(null,
                                                              "erreur JDBC : " + ex.getMessage());
                              }
     
        this.setResizable(false);
        this.setSize(520, 620);
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         this.setVisible(true);
     
      }
     
      public static void main(String[] args) {
     
       SimpleFenetre gui = new SimpleFenetre();
     }
     
                  }

  11. #11
    Membre actif Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Points : 294
    Points
    294
    Par défaut
    Salut,

    j'ai eu le même problème pour afficher les photos des articles d'un magasin !

    Perso, je ne passe pas par un blob, je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    byte[]  photo = resultSet.getBytes( "photo");
    puis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    image.setIcon( new ImageIcon( photo ));
    Hope it helps !
    Nouveau ! Il y a une vie après le java, oxygénez-vous

  12. #12
    Provisoirement toléré
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Points : 125
    Points
    125
    Par défaut
    voila la modification de mon code mais ça n'a pas marché de tout
    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
    68
    69
    70
    71
    72
    73
     
    package aa;
    import javax.swing.*;
    import java.awt.*;
    import java.io.*;
    import java.lang.*;
    import java.sql.*;
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.Insets;
    import javax.swing.JLabel;
    import java.awt.Dimension;
     
     
    public class SimpleFenetre extends JFrame   {
    private JLabel photo= null;
    private GridBagLayout gbl = new GridBagLayout();
    private JLabel lbLogin = new JLabel("Login : ");
     
    public SimpleFenetre() {
     
     
        this.getContentPane().setLayout(gbl);
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.fill = GridBagConstraints.NONE;
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.insets = new Insets(0, 0, 300, 250);
        BufferedInputStream is = null;
        Connection conn = null;
        String url = "jdbc:mysql://localhost/test";
        String userName = "root";
        String password = "19821405";
     
        try {
        Class.forName("org.gjt.mm.mysql.Driver");
        conn = DriverManager.getConnection(url, userName, password);
        Statement instruction = conn.createStatement();
        String sql="SELECT img FROM image WHERE name = 'mustapha'";
        ResultSet resultat = instruction.executeQuery(sql);
     
    while (resultat.next()){
    byte[]  img = resultat.getBytes( "img");
    photo.setIcon( new ImageIcon( img ));
    gbl.setConstraints(this.photo, gbc);
    this.getContentPane().add(this.photo);
    }
     
    }
     
                             catch (ClassNotFoundException ex) {
                                JOptionPane.showMessageDialog(null,
                                                              "Classe introuvable" + ex.getMessage());
                              }
                              catch (SQLException ex) {
                                JOptionPane.showMessageDialog(null,
                                                              "erreur JDBC : " + ex.getMessage());
                              }
     
                               this.setResizable(false);
                               this.setSize(520, 620);
                               this.setLocationRelativeTo(null);
                               this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                               this.setVisible(true);
     
      }
     
      public static void main(String[] args) {
     
       SimpleFenetre gui = new SimpleFenetre();
     }
     
                  }

  13. #13
    Membre actif Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Points : 294
    Points
    294
    Par défaut
    A voir ton code, j'ai l'impression que ta variable 'photo' n'est pas instanciée.

    il faut rajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    photo = new JLabel() ;
    Hope it helps !
    Nouveau ! Il y a une vie après le java, oxygénez-vous

  14. #14
    Membre actif Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Points : 294
    Points
    294
    Par défaut
    Et d'un point de vue SQL, si il y a plusieurs 'mustapha' dans ta table 'image', ton recordset va ramener plusieurs lignes. Et comme tu boucles sur les lignes pour affecter l'image, si le dernier d'entre eux n'a pas d'image....

    un conseil : met des éléments de DEBUG dans ton code (pt d'arrêts si tu peux ) pour vérifier que :

    1 - ta requète ramène un résultat
    2- que l'image contenue dans le recordset n'est pas vide
    Hope it helps !
    Nouveau ! Il y a une vie après le java, oxygénez-vous

  15. #15
    Provisoirement toléré
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Points : 125
    Points
    125
    Par défaut
    merci encore mais le code n'affiche rien la fenetre apparait sans l'image
    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
     
     
     
    try {
        Class.forName("org.gjt.mm.mysql.Driver");
        conn = DriverManager.getConnection(url, userName, password);
        Statement instruction = conn.createStatement();
        String sql="SELECT img FROM image WHERE name = 'mustapha'";
        ResultSet resultat = instruction.executeQuery(sql);
     
    while (resultat.next()){
      photo=new JLabel();
    byte[]  img = resultat.getBytes( "img");
    photo.setIcon( new ImageIcon( img ));
    gbl.setConstraints(this.photo, gbc);
    this.getContentPane().add(this.photo);
    }
     
    }

  16. #16
    Membre actif Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Points : 294
    Points
    294
    Par défaut
    Peux-tu tester le code suivant :
    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
     
    photo =new JLabel() ;
     
    try {
        Class.forName("org.gjt.mm.mysql.Driver");
        conn = DriverManager.getConnection(url, userName, password);
        Statement instruction = conn.createStatement();
        String sql="SELECT img FROM image WHERE name = 'mustapha'";
        ResultSet resultat = instruction.executeQuery(sql);
     
       resultat.next() ; //se place sur le premier resultat
     
      byte[]  img = resultat.getBytes( "img");
     
    System.err.println( "taille du tableau : " +  img.length ) ;
     
      photo.setIcon( new ImageIcon( img ));
      gbl.setConstraints(this.photo, gbc);
      this.getContentPane().add(this.photo);
     
    }
     
    }
    Hope it helps !
    Nouveau ! Il y a une vie après le java, oxygénez-vous

  17. #17
    Provisoirement toléré
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Points : 125
    Points
    125
    Par défaut
    merci encore voila ce que je viens de faire l'mage est affiché sur la fenetre
    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
     
     
     
     
     
    try {
        Class.forName("org.gjt.mm.mysql.Driver");
        conn = DriverManager.getConnection(url, userName, password);
        Statement instruction = conn.createStatement();
        String sql="SELECT img FROM image WHERE name = 'mustapha'";
        ResultSet resultat = instruction.executeQuery(sql);
     
    while (resultat.next()){
      photo=new JLabel();
    String img =resultat.getString("img");
    photo.setIcon( new ImageIcon( img ));
    gbl.setConstraints(this.photo, gbc);
    this.getContentPane().add(this.photo);
    }
     
    }
    mais le pb l'image a pris un grand espace sur la fenetre presque tout la fenetre , je cherche à afficher l'image dans un réctangle ou carré bien limité choisi au haut a la droite

    avec quelcomposant je peux faire ça car avec label c'est moche

  18. #18
    Provisoirement toléré
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Points : 125
    Points
    125
    Par défaut
    je n'ai pas trouvé un composant qui me permet d'afficher l'image car avec jlabel ne marche pas

  19. #19
    Membre actif Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Points : 294
    Points
    294
    Par défaut
    Tu peux toujours mettre ton Panel dans un JScrollPane et ainsi ton image aura une taille fixe mais elle ne sera "réduite" à la taille de ton composant, tu auras juste des ascenseurs.

    Si tu veux la réduire, à mon avis il faut passer par la méthode de dessin de ton composant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //photo est ton JLabel avec ton imageIcon dedans
     
    JScrollPane imp = new JScrollPane(photo) ;
     
    //this est un autre JPanel
    this.add(imp) ;
    hope it helps !
    Hope it helps !
    Nouveau ! Il y a une vie après le java, oxygénez-vous

  20. #20
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2004
    Messages : 102
    Points : 156
    Points
    156
    Par défaut
    Voici la solution :
    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
     
    public class LPanel extends JPanel
    {
         java.awt.Image img ;
         class LPanelUI extends javax.swing.plaf.PanelUI
         {
             public void paint(Graphics g, JComponent c) 
            {
                   if ( img != null )
                  {
                   java.awt.Graphics2D g2=(java.awt.Graphics2D)g;
                   double scale = Math.min(c.getWidth()/img.getWidth(),c.getHeight() /img.getHeight());
                   java.awt.geom.AffineTransform aft = g2.getTransform();
                   g2.scale(scale);
                   g2.drawImage(img,0,0,null);
                   g2.setTransform(aft);
                  }
            }
         }
     
         public void setUI(JPanelUI ui )
        {
            super.setUI(new LPanelUI ());
        }
     
        public void setImage(java.awt.Image img )
       {
            this.img = img ;
       }
    }
    Attention, l'image dessiné ne sera pas centrée, mais dessinée à gauche du panel.
    Voilà !

    Sinon, un conseil : ne pas mettre les images en base de données, car très rapidement, vous aurez des problèmes de mémoire...

    A+
    Hery

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Inserer une image dans BDD access avec vb.net
    Par jarnec dans le forum ADO.NET
    Réponses: 1
    Dernier message: 24/04/2011, 18h58
  2. Réponses: 1
    Dernier message: 18/06/2010, 20h50
  3. Réponses: 4
    Dernier message: 30/04/2007, 23h46
  4. insérer des images dans MySQL avec PHPMyAdmin
    Par intik dans le forum Outils
    Réponses: 1
    Dernier message: 29/08/2006, 09h59

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