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

Laisser un commentaire