Sauvegarder image dans une base de donnees mysql [Résolu]

profiter 211 Messages postés mercredi 15 juin 2011Date d'inscription 15 mars 2013 Dernière intervention - 6 sept. 2011 à 19:51 - Dernière réponse : cs_GodConan 2116 Messages postés samedi 8 novembre 2003Date d'inscriptionContributeurStatut 6 octobre 2012 Dernière intervention
- 9 sept. 2011 à 06:35
bonjour,
j'ai trouvé sur internet des gens qui parle de ca mais sur le web alors une application java avec mysql j'ai pas trouvé de bon chose
la question est bien le ttre du forum
merci
Afficher la suite 

13 réponses

Répondre au sujet
profiter 211 Messages postés mercredi 15 juin 2011Date d'inscription 15 mars 2013 Dernière intervention - 7 sept. 2011 à 15:42
+3
Utile
peux tu me donner qlq indication sur la facon de faire

merci
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de profiter
profiter 211 Messages postés mercredi 15 juin 2011Date d'inscription 15 mars 2013 Dernière intervention - 7 sept. 2011 à 08:10
+1
Utile
j'ai trouvé :
voila la classe dao pour sauvegardé et afficher l'image dans mysql :
public class imprimer_DAO extends DAO<client> {

public void sauveIMG(String location, String name) throws Exception
  {
    File monImage = new File(location);
    FileInputStream istreamImage = new FileInputStream(monImage);

    try
    {
    	PreparedStatement ps = this.connect.prepareStatement("delete from image");
    	ps.executeUpdate();
    	ps this.connect.prepareStatement("ALTER TABLE image AUTO_INCREMENT 0");
    	ps.executeUpdate();
       ps = this.connect.prepareStatement(
          "insert into image (img) values (?)");
      try
      {
        //ps.setString(1, name);
        ps.setBinaryStream(1, istreamImage, (int) monImage.length());
        ps.executeUpdate();
      }
      finally
      {
        ps.close();
      }
    }
    finally
    {
      istreamImage.close();
    }
  }

public Image afficher() throws Exception
  {
    
      PreparedStatement ps = this.connect.prepareStatement("select img from image ");
      try
      {
        ResultSet rs = ps.executeQuery();;
        Image img = null ;
        
          while(rs.next())
          {
            img = ImageIO.read(rs.getBinaryStream("img" ));
            
          }
          return img ;
    }catch(Exception e){
    	System.out.println("erreur chargement image");
    }
return null;
    
    
  }


}


merci
Commenter la réponse de profiter
profiter 211 Messages postés mercredi 15 juin 2011Date d'inscription 15 mars 2013 Dernière intervention - 7 sept. 2011 à 10:55
+1
Utile
si c'est comme ca alors a votre avis comment faire une librairie specifique aux images
et le probleme a mon avis
c'est quand on va faire le setup et l'utiliser : si on veut enregistrer une image elle va augnenter de la taile de l'appli est ce que c'est possibble
si vous pouvez m'expliquer d'avantage cette methode merci bien
Commenter la réponse de profiter
cs_Julien39 6449 Messages postés mardi 8 mars 2005Date d'inscription 15 mars 2018 Dernière intervention - 7 sept. 2011 à 13:12
+1
Utile
Une librairie d'images, c'est juste un dossier qui contient tes images. Et non, ca n'augmentera pas la taille de l'appli plus que si tu les enregistrais dans une base de données.
Commenter la réponse de cs_Julien39
cs_Julien39 6449 Messages postés mardi 8 mars 2005Date d'inscription 15 mars 2018 Dernière intervention - 7 sept. 2011 à 16:05
+1
Utile
Je ne vois pas ce que je peux te dire de plus, tu enregistres tes images dans un dossier et dans la base de données, tu enregistres le path de la forme C:\images\image1.png
Commenter la réponse de cs_Julien39
cs_Julien39 6449 Messages postés mardi 8 mars 2005Date d'inscription 15 mars 2018 Dernière intervention - 6 sept. 2011 à 20:41
0
Utile
Bonjour,

La réponse est simple : ce n'est pas possible avec mySQL. D'autres SGBD le proposent (Oracle et postgresql) mais mySQL ne permet pas d'enregistrer des images.
Commenter la réponse de cs_Julien39
profiter 211 Messages postés mercredi 15 juin 2011Date d'inscription 15 mars 2013 Dernière intervention - 6 sept. 2011 à 21:53
0
Utile
alors a ton avis
quelle est la solution
voila comment ca se passe
image = new imagepanel(Toolkit.getDefaultToolkit().getImage("images_icones/IMM.png"));
   image.setBorder(new BevelBorder(BevelBorder.RAISED, null, null, null, null));
image.setBounds(10, 50, 240, 155);
panel.add(image);



JButton logo = new JButton("Importer un LOGO");
logo.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//JFileChooser choix = new JFileChooser();
int retour=choix.showOpenDialog(impression.this);
if(retour==JFileChooser.APPROVE_OPTION){				   			   image.setimage(Toolkit.getDefaultToolkit().getImage(""+choix.getSelectedFile().getAbsolutePath()));
//--------------------- ici je dois sauvegardé l'image qui se trouve dans cette endroit
// choix.getSelectedFile().getAbsolutePath()
}else  ;
}
});

qu'est ce que vous me proposez
je veux l'utiliser comme logo lors de l'impression des commandes

merci bien
Commenter la réponse de profiter
profiter 211 Messages postés mercredi 15 juin 2011Date d'inscription 15 mars 2013 Dernière intervention - 6 sept. 2011 à 23:51
0
Utile
j'ai trouvé un tuto et un code source pour ca
voila le lien du source http://ricky81.ftp-developpez.com/tutoriel/java/jdbc/blob/sources.zip

et voila le lien du tuto :
http://ricky81.developpez.com/tutoriel/java/jdbc/blob/#L3.2

bref
ce code permet d'enregister une image dans la base de donnees mysql (et aussi postgresql )et l'extraire pour la sauvegardé a un endroit dans le disque dur

mais bon moi je veux l'extraire et la rendre en format image
si vous avez une idée

voici les morceau de code qui permet de sauvegarder et d'extraire l'image de la base :

public void sauveIMG(String location, String name) throws Exception
  {
    File monImage = new File(location);
    FileInputStream istreamImage = new FileInputStream(monImage);

    try
    {
      PreparedStatement ps = conn.prepareStatement(
          "insert into image (name, img) values (?,?)");
      try
      {
        ps.setString(1, name);
        ps.setBinaryStream(2, istreamImage, (int) monImage.length());
        ps.executeUpdate();
      }
      finally
      {
        ps.close();
      }
    }
    finally
    {
      istreamImage.close();
    }
  }


  public void chargeIMG(String name, String location) throws Exception
  {
    File monImage = new File(location);
    FileOutputStream ostreamImage = new FileOutputStream(monImage);

    try
    {
      PreparedStatement ps = conn.prepareStatement("select img from image where name=?");
      try
      {
        ps.setString(1,name);
        ResultSet rs = ps.executeQuery();;
        try
        {
          if(rs.next())
          {
            InputStream istreamImage = rs.getBinaryStream("img");

            byte[] buffer = new byte[1024];
            int length = 0;

            while((length = istreamImage.read(buffer)) != -1)
            {
              ostreamImage.write(buffer, 0, length);
            }
          }
    }
    finally
    {
  rs.close();
}
      }
      finally
      {
        ps.close();
      }
    }
    finally
    {
      ostreamImage.close();
    }
  }


merci
Commenter la réponse de profiter
cs_GodConan 2116 Messages postés samedi 8 novembre 2003Date d'inscriptionContributeurStatut 6 octobre 2012 Dernière intervention - 7 sept. 2011 à 05:00
0
Utile
salut... ;o)

ce qui serait interressant de connaitre c est la structure de la table ;o) ...
je pense que l on doit pouvoir sauvegarder l image dans un blob!! (jamais essayé)
la solution que j ai retenu est de faire faire une librairie d image et de ne sauvegarder que les reference de ces images dans la base... j avantage c est que la base est bcp moins volumineuse...



GodConan ;o)
Commenter la réponse de cs_GodConan
profiter 211 Messages postés mercredi 15 juin 2011Date d'inscription 15 mars 2013 Dernière intervention - 7 sept. 2011 à 07:16
0
Utile
et si on veut que l'image doit etre importer par un utilisateur dans un poste apart le serveur et on veut qu'elle soit sauvegardé
je pense que ca ne va pas marché avec ca
Commenter la réponse de profiter
profiter 211 Messages postés mercredi 15 juin 2011Date d'inscription 15 mars 2013 Dernière intervention - 7 sept. 2011 à 08:12
0
Utile
j avantage c est que la base est bcp moins volumineuse...


moi je n'enregistre qu'une seule image si l'utilisateur importe une autre la premiere sera ecrasé
don pas de volumineux
n'est ce pas
Commenter la réponse de profiter
cs_Julien39 6449 Messages postés mardi 8 mars 2005Date d'inscription 15 mars 2018 Dernière intervention - 7 sept. 2011 à 08:40
0
Utile
@GodConan : je pensais que les types LOB n'étaient utilisables qu'avec Oracle ?

La solution de godConan : enregistrer les images dans une librairie et stocker dans la base de données les uri des images une une solution courante et qui fonctionne bien. Qui plus est avec une base de données mySQL qui n'est pas adaptée aux gros volumes de données.
Commenter la réponse de cs_Julien39
cs_GodConan 2116 Messages postés samedi 8 novembre 2003Date d'inscriptionContributeurStatut 6 octobre 2012 Dernière intervention - 9 sept. 2011 à 06:35
0
Utile
Tu peux stoker un chemin relatif ds ta base et utiliser un parametre path data dans ton appli ;o) ...

@Julien39 : ;o) ca fait qd meme lontemps ;o) que MySQL peu traiter de gros volume de données ;o) et les BLOB ;o) ... aprés la difference entre oracle ;o) et MySQL ;o) existe encore certe... ;o)



GodConan ;o)
Commenter la réponse de cs_GodConan

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.