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 :

Afficher une photo depuis une base de données SQL


Sujet :

JDBC Java

  1. #1
    Futur Membre du Club Avatar de BangouraMohamed
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2018
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Afficher une photo depuis une base de données SQL
    Bonjour a tous , je développe une application desktop en java , j'ai pus stoqué mes photos dans une base de donnée sql mais le gros des problème maintenant est de savoir comment afficher une photo a partir de son identifiant dans un JFrame...

    voici une ullustraction de mon code source
    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
    	 public Image afficher() throws Exception /* CETTE METHODE EST APPELLER DANS UN Jframe POUR AFIN RECUPERER LA PHOTO SOLICITER MAIS LE "null" M'YAIS RETOURNER*/
    	 {
    		 PreparedStatement ps=this.connexion.prepareStatement("SELECT images FROM Image1 WHERE nom=?");
    		 try
    		 {
    			 ResultSet rs=ps.executeQuery();
    			 Image image=null;
    			 while(rs.next())
    			 {
    				 image=ImageIO.read(rs.getBinaryStream("images"));
    			 }
    			 return image;
    		 }catch(Exception e)
    		 {
    			 JOptionPane.showMessageDialog(null, "ERREUR L'ORS DE L'AFFICHAGE DE L'IMAGE");
     
    		 }
    		 return null;
    	 }
    j'ai beaucoup chercher sur les forums mais toujours en vain, vos aide me seront vraiments utile , merci d'avance!

  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,

    1. Le plus simple pour afficher une image, dans une JFrame, c'est d'utiliser ImageIcon et un JLabel.
      Mais la taille du JLabel sera celle de l'image.
      • on peut mettre le JLabel dans un JScrollPane
      • on peut utiliser Image.getScaledImage() pour changer la taille de l'image
    2. On peut afficher l'image dans le fond d'un composant en changeant sa taille dynamiquement pour qu'elle s'adapte à la taille du composant (donc de la JFrame).
      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
      public class ImagePanel extends JPanel {
       
      		private BufferedImage image;
       
      		public void setImage(BufferedImage image) {
      			this.image=image;
      			repaint();
      		}
       
      		@Override
      		protected void paintComponent(Graphics g) {
      			super.paintComponent(g);
      			if ( image!=null ) {
      				final double width;
      				final double height;
      				if ( image.getWidth()>image.getHeight() ) {
      					final double scale = (getWidth()*1f)/image.getWidth();
      					width = getWidth();
      					height = image.getHeight()*scale;
      				}
      				else {
      					final double scale = (getHeight()*1f)/image.getHeight();
      					height = getHeight();
      					width = image.getWidth()*scale;
      				}
      				final double x = (getWidth()-width)/2;
      				final double y = (getHeight()-height)/2;
      				g.drawImage(image, (int)x, (int)y, (int)width, (int)height, this);
      			}
      		}
       
      	}

  3. #3
    Futur Membre du Club Avatar de BangouraMohamed
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2018
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Bien joel mais ma question ne saggit pas d'afficher image dans une fenetre plutot ''comment charger une image qui se trouve dans la base de donnée et l'afficher dans sa fenetre'' merci

  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
    Pour le chargement depuis la base, il me semblait que tu savais le faire, puisque tu en montrais le code. Après, ça peut dépendre de la façon de stocker l'image dans la base (en général, on évite de stocker directement les fichiers dans une base, on stocke leur chemin et on stocke les fichiers dans le file system, mais bon, c'est un autre sujet à la limite).
    En relisant ce code, je m'aperçois effectivement qu'il manque la partie "par son identifiant". Déjà, il faudrait au moins le passer en argument de la méthode afficher, ou l'avoir quelque part en tout cas (une variable de classe par exemple).
    Et après, le plus important, est surtout de le passer à la requête, ce qui va se faire sur le PreparedStatement, en appelant par exemple la méthode ps.setString(1, identifiant) (le 1 c'est le numéro de paramètre dans l'expression SQL du PreparedStatement, paramètre qui est caractérisé par le ? dans l'expression).

    Enfin, à noter qu'il est indispensable de libérer les ressources pour éviter d'occuper la mémoire avec des ressources non utilisables, parce qu'à force, on risque le outofmemory.

    Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public Image afficher(String identifiant) {
       		 try (PreparedStatement ps=this.connexion.prepareStatement("SELECT images FROM Image1 WHERE nom=?")){
                             ps.setString(1, identifiant );
    			 try(ResultSet rs=ps.executeQuery()) {
    			    if (rs.next()) {
    				 return ImageIO.read(rs.getBinaryStream("images"));
    			     }
                             }
    		 }catch(Exception e) {
    			 JOptionPane.showMessageDialog(null, "ERREUR L'ORS DE L'AFFICHAGE DE L'IMAGE");
    		 }
    		 return null;
    	 }
    Il se peut également que cette méthode d'accès au stream ne corresponde pas au type que tu utilises pour stocker l'image dans la base. Par exemple, si tu utilises un Blob (Binary large object), il te faudra écrire quelque chose comme ça :

    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
    public Image afficher(String identifiant) {
       		 try (PreparedStatement ps=this.connexion.prepareStatement("SELECT images FROM Image1 WHERE nom=?")){
                             ps.setString(1, identifiant );
    			 try(ResultSet rs=ps.executeQuery()) {
    			    if (rs.next()) {
                                     Blob blob = rs.getBlob("images");
                                     try(InputStream inputStream = blob.getBinaryStream()) {
    				         return ImageIO.read( inputStream  );
                                     }
                                     finally {
                                         blob.free();
                                     }
    			     }
                             }
    		 }catch(Exception e) {
    			 JOptionPane.showMessageDialog(null, "ERREUR L'ORS DE L'AFFICHAGE DE L'IMAGE");
    		 }
    		 return null;
    	 }

Discussions similaires

  1. Réponses: 13
    Dernier message: 16/01/2015, 10h50
  2. Afficher un textes dans une application depuis une autre
    Par amine008 dans le forum Windows Communication Foundation
    Réponses: 2
    Dernier message: 11/07/2011, 17h17
  3. Réponses: 1
    Dernier message: 07/04/2011, 14h02
  4. Afficher une image depuis ma base de données MySQL
    Par hnoumbo dans le forum Outils
    Réponses: 3
    Dernier message: 16/08/2006, 08h57
  5. Réponses: 5
    Dernier message: 07/06/2006, 12h11

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