Bon c'est une question concernant à la fois JDBC et la classe Image.
Je veux enregistrer un objet Image dans une base via JDBC.
Il y a des dizaines de tuto pour enregistrer par exemple un fichier JPEG dans une base MySql,
mais j'ai eu un mal de chien à trouver quelque chose pour enregistrer un objet de la classe Image dans une base.
Voilà ce que j'ai finalement fait :
Cela fonctionne.
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 Image img = .... // transformer l'image en BufferedImage BufferedImage bufferedImage = new BufferedImage( img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB ); // ouverture d'un ByteArrayOutputStream dans lequel on écrit la BufferedImage ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ImageIO.write(bufferedImage, "jpg", byteArrayOutputStream); // conversion du ByteArrayOutputStream en tableau de bytes placé dans un InputStream byte[] bytes = byteArrayOutputStream.toByteArray(); ByteArrayInputStream bais = new ByteArrayInputStream(bytes); // enfin on peut écrire tout le bouzingue dans le PreparedStatement PreparedStatement ps = ... ps.setBinaryStream(1, bais, bytes.length);
Cependant existe-t-il un moyen plus simple que d'utiliser la méthode setBinaryStream qui exige de transformer l'image en InputStream de façon assez lourdingue.![]()
Partager