• JDBC et les BLOB

    jdbc JDBC et les BLOB(Binary Large Object)

        Qu'est ce qu'un LOB ?

    Un LOB ou Large OBject est une catégorie de types SQL 3. Il en existe deux : les BLOB et les CLOB. Ces types permettent de stocker de grandes quantités de données dans une seule "celulle" d'une table.

        Qu'est ce qu'un BLOB ?

    Un BLOB ou Binary Large OBject permet de stocker de grandes quantités de données sous forme binaire. On peut par exemple insérer dans une table des fichiers (images, musique, etc.).
     
        Qu'est qu'un CLOB ?

    Un CLOB ou Character Large OBject permet de stocker de grandes quantités de données sous forme de caractères. On peut par exemple insérer dans une table des articles de journaux, des livres ou les pages d'un site internet.
     
        Que vient faire JDBC là dedans ?

    JDBC a prévu pour la manipulation de ces deux types SQL les classes Clob et Blob du package java.sql. La plupart des manipulations de ce objets se font directement en utilisant des flux.
     
    database Côté Base de Donnée
     
    Pour MySQL:

    TINYBLOB <= 255 octets (1 octet pour stocker la taille)
    BLOB <= 65 535 octets (2 octets pour la taille)
    MEDIUMBLOB <= 16 777 215 octets (3 octets pour la taille)
    LONGBLOB <= 4 294 967 295 octets (4 octets pour la taille)
     
            CREATE TABLE image (
                name varchar(20) NOT NULL,
                img mediumblob,
                PRIMARY KEY (name));
     
    Pour PostgreSQL:
     
        BYTEA qui permet de stocker des données binaires allant jusqu'à 1 Go.
     
            CREATE TABLE "public"."image" (
                "name" VARCHAR(20) NOT NULL,
                "img" BYTEA,
                PRIMARY KEY("name")) WITH OIDS;
     
    duke Côté Java
            Les drivers à utiliser :
                Pour MySQL: com.mysql.jdbc.Driver
                Pour PostgreSQL: org.postgresql.jdbc.Driver
     
                La String chemin correspond au fichier que l'on manipule (le fichier + le chemin complet).
                La String nom correspond au nom que l'on veut donner à l'image dans la base.
                Je n'ai pas géré les exceptions ou encore fermer les flux pour ne pas alourdir le code.
     
            Comment insérer un BLOB dans la base ?
     
                  Connection connection = DriverManager.getConnection("url","user","password");             
                  File monImage = new File(chemin);             
                  FileInputStream stream = new FileInputStream(monImage);
                  String sql = "INSERT INTO image VALUES (?, ?)";
                  PreparedStatement statement = connection.prepareStatement(sql);
                  statement.setString(1, nom);
                  statement.setBinaryStream(2, stream, (int)file.length());
                  statement.executeUpdate(); 
     
            Comment récupérer un BLOB de la base ?
     
                  Connection connection = DriverManager.getConnection("url","user","password");
                  File monImage = new File(chemin);
                  FileOutputStream ostreamImage = new FileOutputStream(monImage); 
                  String sql = "SELECT img FROM image WHERE name=?";
                  PreparedStatement statement = connection.prepareStatement(sql);
                  statement.setString(1,name);
                  ResultSet rs = statement.executeQuery();     
                  if(rs.next()) {
                      InputStream istreamImage = rs.getBinaryStream("img");         
                      byte[] buffer = new byte[1024];
                      int length = 0;       
                      while((length = istreamImage.read(buffer)) != -1){
                          ostreamImage.write(buffer, 0, length);
                      }
                  }
     

     

     


  • Commentaires

    Aucun commentaire pour le moment

    Suivre le flux RSS des commentaires


    Ajouter un commentaire

    Nom / Pseudo :

    E-mail (facultatif) :

    Site Web (facultatif) :

    Commentaire :