Bonsoir tout le monde,
j'arrive pas a charger et afficher une image sur mon application JAVA a partir de ma base de donnees (ACCESS).
Quelqu'un peu m'aider ou me donner un bon lien SVP.
Merci.
Bonsoir tout le monde,
j'arrive pas a charger et afficher une image sur mon application JAVA a partir de ma base de donnees (ACCESS).
Quelqu'un peu m'aider ou me donner un bon lien SVP.
Merci.
Et toi, as-tu du code a nous montrer qu'on puisse voir ce que tu as tenté de faire (et éventuellement le corriger) ? Sous quelle format tes images sont-elles stockées dans ta base ?
Merci de penser au tagquand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.
suivez mon blog sur Développez.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook
Les images sont sous format ''jpg'' je les stocké dans ACCESS, le champ est de type OLE Object.
le code est le 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
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 public void List_DataBase(){ ResultSet rs; final Vector<String> nomColonnes = new Vector<String>(); final Vector<Vector<Object>> donnees = new Vector<Vector<Object>>(); try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con = DriverManager.getConnection("jdbc:odbc:Test"); Statement st = con.createStatement(); rs= st.executeQuery("Select Authentication.Time, Authentication.Result, Employee.First_Name, Employee.Last_NAME, Employee.Photo from Employee " + "INNER JOIN Authentication ON Employee.UserID=Authentication.UserID Order By Authentication.Time DESC"); ResultSetMetaData md = rs.getMetaData(); int nbrColonnes = md.getColumnCount(); //for (int i = 1; i <= nbrColonnes; i++) { for (int i = 1; i < nbrColonnes; i++) { nomColonnes.addElement( md.getColumnName(i) ); } //String [] nomColonnes = {"Time", "Result", "First_Name"}; while (rs.next()) { // Boucle pour remplir la Jtable Vector<Object> row = new Vector<Object>(nbrColonnes); //for (int i = 1; i <= nbrColonnes; i++) { for (int i = 1; i < nbrColonnes; i++) { row.addElement( rs.getObject(i) ); } donnees.addElement( row ); } } catch(Exception e){ System.out.println(" =="+e.getMessage()); System.out.println(" =="+e.getCause()); } JTable table =new JTable(); DefaultTableModel model = new DefaultTableModel(donnees, nomColonnes); table.setModel(model); JScrollPane scrollPane = new JScrollPane(table); scrollPane.setBounds(12, 503, 761, 168); getContentPane().add(scrollPane); }
Mon but est d'afficher dans 'Jtable' le contenu des champs (time,result, firstname,lastname) et en même temps je veux afficher l'image stockée dans le champ Photo dans un jpanel. Pour 'Jtable' tout est correct juste j'ai pas réussi a afficher l'image.
Mon code explique comment j'affiche le 'Jtable' mais pour l'image j'ai essayé plusieurs code mais ça n'a pas marché donc je l'ai enlevé.
Pour le moment je ne vois pas grand chose dans ce code qui soit en rapport avec des images. Mais bon, ton but est de récupérer un byte[] depuis ton enregistrement dans ta base (les bits format l'image stockée au format JPG) et d'ensuite d'utiliser ImageIO pour en lire une BufferedImage que tu pourras afficher.
PS : tu mentionnes un OLE object comme type donc vérifie bien que c'est le bon format pour les images et non pas un type Microsoft / Office.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 byte[] bytes = resultSet.getBytes(imageColumnIndex); // Extraire de base. BuferedImage image = null; try (ByteArrayInputStream input = new ByteArrayInputStream(bytes)) { image = ImagIO.read(input); // Conversion en image. }
Merci de penser au tagquand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.
suivez mon blog sur Développez.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook
J'ai ajouté ton code pour extraire l'image de la base puis la convertir mais ça n'a pas marché.
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 public void List_DataBase(){ ResultSet rs; final Vector<String> nomColonnes = new Vector<String>(); final Vector<Vector<Object>> donnees = new Vector<Vector<Object>>(); try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con = DriverManager.getConnection("jdbc:odbc:Test"); Statement st = con.createStatement(); /* rs= st.executeQuery("Select Authentication.Time, Authentication.Result, Employee.First_Name, Employee.Last_NAME from Employee " + "INNER JOIN Authentication ON Employee.UserID=Authentication.UserID Order By Authentication.Time DESC");*/ rs= st.executeQuery("Select Picture.Photo from Picture"); ResultSetMetaData md = rs.getMetaData(); // Recuperer les meta données int nbrColonnes = md.getColumnCount(); // le nombre de colonnes for (int i = 1; i <= nbrColonnes; i++) {/// Remplir le titre de colonnes nomColonnes.addElement( md.getColumnName(i) ); } while (rs.next()) { // Boucle pour remplir la Jtable Vector<Object> row = new Vector<Object>(nbrColonnes); for (int i = 1; i <= nbrColonnes; i++) { //row.addElement( rs.getObject(i) ); // Recuperer le i eme champs ////////////////////////////////// byte[] bytes = rs.getBytes("Photo"); // Extraire de base. BufferedImage image = null; try (ByteArrayInputStream input = new ByteArrayInputStream(bytes)) { image = ImageIO.read(input);} // Conversion en image. row.addElement(image); /////////////////////////////////// } donnees.addElement( row ); } } catch(Exception e){ System.out.println(" =="+e.getMessage()); System.out.println(" =="+e.getCause()); } JTable table =new JTable(); DefaultTableModel model = new DefaultTableModel(donnees, nomColonnes); table.setModel(model); JScrollPane scrollPane = new JScrollPane(table); scrollPane.setBounds(12, 55, 369, 264); getContentPane().add(scrollPane);
Pour essayer j'ai fais une table Picture dans ma base access et j'ai ajouté un champs qui s'appelle Photo de type Ole Objet mais ça n'a pas marché.
Oui mais justement, ton soucis c'est peut-être que le "format OLE", ça n'a en fait rien a voir avec le format JPEG (les bits dans un fichier JPG)... et qu'en fait ta base stocke l'image sous un format propre a Microsoft et que donc que Java (ImageIO) ne peut pas recréer l'image derrière.
Après, ce que tu peux tenter de faire c'est d'ecrire le byte[] que tu viens de sortir de la DB dans un fichier et de tenter de voir si un logiciels de manipulation d'image lambda peut l'ouvrir sans planter ce qui serait une bonne indication que le tableau contient bien des données au format JPEG.
Voir aussi :
Merci de penser au tagquand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.
suivez mon blog sur Développez.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook
Partager