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 :

 
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:

Insérer et récupérer une image à partir d'une base de données MySQL - Java

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:

Insérer et récupérer une image à partir d'une base de données MySQL - Java

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:


 
QCM Java - JDBCQCM Java – JDBCQCM sur l’API JDBC en Java avec des réponses pour la préparation des entretiens d’embauche, des tests en ligne, aux examens et aux certifications. Ces…Lire plus
Partagez cet article

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *