Insérer et récupérer une image à partir d’une base de données MySQL – Java
Dans ce tutoriel nous allons découvrir comment insérer et récupérer une image à partir d’une table de base de données MySQL à l’aide de Java. La plupart du temps, les images sont stockées dans des répertoires et stockent le chemin des images dans des tables de base de données. mais dans certains scénarios, nous devons insérer les images dans des tables de base de données au format binaire.
Pré-requis :
- Téléchargez et installez JDK sur votre système.
- Téléchargez et installez le serveur MySql.
- Téléchargez le connecteur(mysql-connector-java-5.1.49.zip) ou les pilotes MySQL pour utiliser MySQL avec Java.
La première chose à faire est de mettre en place notre base de données.
Créer une base de données appelée « test ». Dans la base de données « test », ajoutez une table appelée « image ». La table image prendra les trois champs suivants.
- id
- size
- image
Vous pouvez créer ceci en utilisant un client MySQL comme PHPMyAdmin.

Ou vous pouvez le créer sur l’invite de commande MySQL en utilisant le script SQL suivant :
CREATE TABLE `image` ( `id` varchar(45) DEFAULT NULL, `size` int(11) DEFAULT NULL, `image` longblob );
Dans MySQL, lorsque nous utilisons le type blob pour stocker les données, il ne supporte que 5 ko comme capacité d’image. cela dépend du SGBD. selon certains SGBD, le type d’objet blob prend en charge une grande capacité.
Insérer l’image dans la base de données:

import java.sql.*;
import java.io.*;
public class InsertImg
{
public static void main(String[] args)
{
//URL de connexion
String url = "jdbc:mysql://localhost:3306/test?autoReconnect=true&useSSL=false";
//L'utilisateur
String user = "root";
//Mot de passe
String password = "";
try{
//créer la chaîne de connexion à la base de données
Connection con = DriverManager.getConnection(url, user, password);
//objet pour créer la requête
Statement st = con.createStatement();
//l'image à insérer
File file = new File("test.png");
FileInputStream input = new FileInputStream(file);
//creation de la requête
PreparedStatement ps =
con.prepareStatement("insert into Image values(?,?,?)");
//id
ps.setString(1,"img001");
//size
ps.setInt(2,99);
//image
ps.setBinaryStream(3,(InputStream)input,(int)file.length());
//exécution de la requête
ps.executeUpdate();
System.out.println("Image insérée avec succès!");
//fermer le preparedStatement
ps.close();
//fermer la connexion
con.close();
}catch (Exception e){
System.out.println(e.getMessage());
}
}
}
Compiler et exécuter le programme:
Vous pouvez exécuter le code ci-dessus en ligne de commande(CMD):
> javac InsertImg.java > java -cp .;lib/mysql-connector-java-5.1.49.jar InsertImg
Télécharger le fichier mysql-connector-java-5.1.49.jar et mettez-le dans le dossier lib de votre projet.

Résultat sur PHPmyAdmin:

Récupérer l’image à partir de la base de données:

import java.sql.*;
import java.io.*;
public class SelectImg
{
public static void main(String[] args)
{
//URL de connexion
String url = "jdbc:mysql://localhost:3306/test?autoReconnect=true&useSSL=false";
//L'utilisateur
String user = "root";
//Mot de passe
String password = "";
try{
//créer la chaîne de connexion à la base de données
Connection con = DriverManager.getConnection(url, user, password);
//objet pour créer la requête
Statement st = con.createStatement();
//exécution de la requête
ResultSet rs = st.executeQuery("SELECT image FROM Image");
int i = 0;
while (rs.next()) {
InputStream input = rs.getBinaryStream(1);
//créer l'image dans le répertoir courant
OutputStream output = new FileOutputStream(new File("test"+i+".jpg"));
i++;
int b = 0;
while ((b = input.read()) > -1) {
output.write(b);
}
//fermer le OutputStream
output.close();
//fermer le InputStream
input.close();
}
//fermer la connexion
con.close();
}catch (Exception e){
System.out.println(e.getMessage());
}
}
}
Compiler et exécuter le programme:
> javac SelectImg.java > java -cp .;lib/mysql-connector-java-5.1.49.jar SelectImg
Afficher l’image stockée dans la base de données dans un JFrame:

import java.awt.*;
import java.sql.*;
import javax.swing.*;
public class ShowMyImage extends JFrame
{
public ShowMyImage()
{
super("Afficher une image à partir d’une BD MySQL");
setSize(300, 300);
//récupérer la connexion
Connection con = getConnection();
try {
//creation et exécution de la requête
PreparedStatement statement = con.prepareStatement("SELECT image FROM Image WHERE id = 'img001'");
ResultSet res = statement.executeQuery();
//récupérer l'image sous forme d'octet
byte[] image = null;
while (res.next()) {
image = res.getBytes("image");
}
//créer l'image
Image img = Toolkit.getDefaultToolkit().createImage(image);
ImageIcon icone = new ImageIcon(img);
JLabel l = new JLabel();
l.setIcon(icone);
add(l);
} catch (SQLException e) {
e.printStackTrace();
}
setVisible(true);
}
public Connection getConnection() {
String url = "jdbc:mysql://localhost:3306/test?autoReconnect=true&useSSL=false";
//L'utilisateur
String user = "root";
//Mot de passe
String password = "";
//initialiser la connexion
Connection con = null;
try {
//créer la chaîne de connexion à la base de données
con = DriverManager.getConnection(url, user, password);
} catch (Exception e) {
System.out.println("Erreur de connexion: "+ e);
}
return con;
}
public static void main(String[] args) {
new ShowMyImage();
}
}
Compiler et exécuter le programme:
> javac ShowMyImage.java > java -cp .;lib/mysql-connector-java-5.1.49.jar ShowMyImage
Sortie:






