Stocker un fichier dans une base de données | JDBC – Java

Dans ce tutoriel JDBC nous allons découvrir comment insérer des données binaires (ou d’un fichier) dans une base de données.

Pour stocker un fichier dans une table de base de données, la table doit avoir une colonne dont le type de données est CLOB (Character Large Object). En supposant que nous ayons une table MySQL appelée ‘Articles’ qui est créée par le script SQL suivant:

CREATE TABLE Articles(
	ID NUMBER(3), 
	Paragraphe LONGTEXT
);

 
 
Nous pouvons remarquer que la colonne ‘Paragraphe’ a le type LONGTEXT – qui est l’un des quatre types de clob de MySQL:

  • TINYTEXT,
  • TEXT,
  • MEDIUMTEXT,
  • LONGTEXT

JDBC prend en charge le type de données Clob, pour stocker le contenu d’un fichier dans une table de base de données.

La méthode setCharacterStream() de l’interface PreparedStatement accepte un entier représentant l’index du paramètre et un objet Reader comme paramètre.

Et définit le contenu de l’objet reader donné (file) comme valeur du paramètre dans l’index spécifié.

Chaque fois que vous devez envoyer un grand texte, vous pouvez utiliser cette méthode.

Maintenant, connectez-vous à la base de données et créer un objet PreparedStatement pour insérer des valeurs dans la table créée ci-dessus:

PreparedStatement ps = con.prepareStatement(
"INSERT INTO articles VALUES(?,?)");
			
File file = new File("c:\\file.txt");
FileReader reader = new FileReader(file);
			
ps.setInt(1, 101);
ps.setCharacterStream(2, reader, (int)file.length());
int i = ps.executeUpdate();
System.out.println(i+" enregistrements affectés");
			
con.close();

Dans le code ci-dessus, nous avons défini le type de données Clob à l’aide de la méthode setCharacterStream().
 
 

Exemple: Avec une base de donnée MySQL
import java.sql.*;
import java.io.FileReader;

public class Main {
   public static void main(String args[]) throws Exception {
      //Enregistrer le pilote
      DriverManager.registerDriver(new com.mysql.jdbc.Driver());
      //Récupérer la connexion
      String url = "jdbc:mysql://localhost/test";
      Connection con = DriverManager.getConnection(url, "root", "");
      System.out.println("Connection établie...");
      //Insertion de valeurs
      String query = "INSERT INTO Articles(ID, Paragraphe) VALUES (?, ?)";
      PreparedStatement pr = con.prepareStatement(query);
      pr.setString(1, 101);
      FileReader reader = new FileReader("c:\\file.txt");
      pr.setCharacterStream(2, reader);
      pr.execute();
      System.out.println("Données insérées...");
   }
}

 
 

Exemple: Avec une base de donnée Oracle
import java.io.*;
import java.sql.*;

public class Main {
	public static void main(String[] args) {
		try{
			Class.forName("oracle.jdbc.driver.OracleDriver");
			Connection con = DriverManager.getConnection(
			"jdbc:oracle:thin:@localhost:1521:xe","system","oracle");
						
			PreparedStatement ps = con.prepareStatement(
			"INSERT INTO articles VALUES(?,?)");
						
			File file = new File("c:\\file.txt");
			FileReader reader = new FileReader(file);
						
			ps.setInt(1, 101);
			ps.setCharacterStream(2, reader, (int)file.length());
			int i = ps.executeUpdate();
			System.out.println(i+" enregistrements affectés");
						
			con.close();		
		}
		catch (Exception e) {e.printStackTrace();}
	}
}

 
QCM Java - JDBC

Laisser un commentaire

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