Enregistrer facilement une image avec JDBC
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:
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.:boulet: