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 :
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);
Cela fonctionne.
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.