Récupérer un fichier à partir d’une base de données | JDBC – Java
L’interface ResultSet fournit les méthodes getClob() et getCharacterStream() pour récupérer le type de données Clob, dans lequel le contenu d’un fichier est généralement stocké.
Ces méthodes acceptent un entier représentant l’index de la colonne (ou une valeur de chaîne représentant le nom de la colonne) et récupèrent la valeur dans la colonne spécifiée.
La différence est que la méthode getClob() renvoie un objet Clob et la méthode getCgaracterStream() renvoie un objet Reader qui contient le contenu du type de données Clob.
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
Exemple:
Le programme suivant récupère le contenu de la table ‘Articles’ à l’aide des méthodes getString() et getClob() et l’enregistre dans les fichiers spécifiés.
import java.sql.*; import java.io.*; 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..."); //Créer un objet Statement Statement stmt = con.createStatement(); //Récupération des données ResultSet res = stmt.executeQuery("SELECT * FROM articles"); int i = 0; System.out.println("Le contenu de la table est: "); while(res.next()) { System.out.println(res.getInt("ID")); Clob c = res.getClob("Paragraphe"); Reader reader = c.getCharacterStream(); String file = "c:\\file"+i+".txt"; FileWriter wr = new FileWriter(file); int i; while ((i = reader.read())!=-1) { wr.write(i); } wr.close(); System.out.println(file); i++; } } }