IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Charger un fichier enregistré dans une table postgresql


Sujet :

Entrée/Sortie Java

  1. #1
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 464
    Points : 203
    Points
    203
    Par défaut Charger un fichier enregistré dans une table postgresql
    Bonjour les développeurs,

    Je veux récupérer (ouvrir) un fichier binaire qui est enregistré dans une table (postgrsql) cette table contient plusieurs champs dont le dernier champ est de type blob. Je veux le récupérer et l'ouvrir, quelqu'un peut me donner une idée ?

    PS : JDBC et les données binaire postés sur ce site ne m'ont pas aidé

    Merci d'avance pour votre aide

    Cordialement

  2. #2
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 464
    Points : 203
    Points
    203
    Par défaut
    Je commence à clairement avoir besoin d'un petit coup de pouce.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    try {
     
                 int cc=Integer.parseInt(c.getText());
                 String UrlBase = "jdbc:postgresql://localhost:5432/gestion";
                 String driver="org.postgresql.Driver";
                 String user = "postgres";
                 String MDP="******";
     
                 String selectSQL = "SELECT image FROM x WHERE code = ?";
     
                 Connection conn = DriverManager.getConnection(UrlBase, user,MDP);
     
                 PreparedStatement preparedStatement = conn.prepareStatement(selectSQL);
                 preparedStatement.setInt(1, cc);
     
     
                  ResultSet rs = preparedStatement.executeQuery();
     
                   InputStream userid = null;
                  while (rs.next()) {
     
     
                     userid = rs.getBinaryStream("image");
     
                 }       
                 FileOutputStream outputStream = null;
                 try {
                     outputStream = new FileOutputStream(new File("/Users/s.docx"));
                 } catch (FileNotFoundException ex) {
                     Logger.getLogger(DossierPatient.class.getName()).log(Level.SEVERE, null, ex);
                 }
     
    		int read = 0;
    		byte[] bytes = new byte[1024];
     
                 try {
                     while ((read = userid.read(bytes)) != -1) {
                         outputStream.write(bytes, 0, read);
                     }
                 } catch (IOException ex) {
                     Logger.getLogger(Dossier.class.getName()).log(Level.SEVERE, null, ex);
                 }
     
     
     
     
             } catch (SQLException ex) {
                 Logger.getLogger(Dossier.class.getName()).log(Level.SEVERE, null, ex);
             }
    Et la j'ai ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    GRAVE: null
    java.io.FileNotFoundException: \Users\s.docx (Accès refusé)
    J'avoue que je ne sais pas si je dois créer le fichier vierge et si j'indique son chemin ensuite ou bien j'indique un chemin et le fichier se crée

    Pouvez vous m'aider ?

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Le message d'erreur indique que tu essayes de créer le fichier à un endroit où tu n'as pas le droit. Déjà ton chemin est relatif et je suppose que tu exécutes ton programme avec comme dossier d'exécution c:/ : on n'a pas le droit d'écrire dans le dossier Users de Windows. Il faut créer le fichier dans le dossier de ton utilisateur, voire un de ses sous-dossiers.

    Essaye par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new FileOutputStream(new File(new File(System.getProperty("user.home"), "Documents"), "s.docx"));
    qui crééra le fichier dans ton dossier utilisateur "Documents" par exemple.

    Par ailleurs, la structure du code serait mieux ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    while (rs.next()) {
       try(InputStream userid = rs.getBinaryStream("image");
            FileOutputStream outputStream =  new FileOutputStream(new File(new File(System.getProperty("user.home"), "Documents"), "s.docx")); ) {
    	final byte[] bytes = new byte[1024];
            for (int read = userid.read(bytes); read!=-1; read = userid.read(bytes)) {
                 outputStream.write(bytes, 0, read);
            }
       } catch (IOException ex) {
           Logger.getLogger(Dossier.class.getName()).log(Level.SEVERE, null, ex);
       }
    } // while
    ce qui t'évitera (structure try-with-resources) d'avoir à te préoccuper de fermer les flux (ce que tu as "oublié" de faire dans ton code).

  4. #4
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 464
    Points : 203
    Points
    203
    Par défaut
    merci pour votre aide ça marche pas vraiment le fichier se crée normalement mais il est vide je l'ouvre et je ne trouve rien dedans !!! ou est le probléme à votre avis??(si c'est pas trop demandé bien sur)

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Soit il est de taille nulle à la base, soit il est mal fermé (et n'a jamais été flushé). Tu as utilisé mon code, ou tu as modifié le tiens ? Quel est ton code actuel ?

  6. #6
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 464
    Points : 203
    Points
    203
    Par défaut
    c'est bon il est crée mais j'ai un msg d'erreur qui dit qu'impossible d'ouvrir le document peut etre il est mal formé!!!
    voila le code j'ai utilisé le votre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
     
     try {
                 // TODO add your handling code here:
                 int cc=Integer.parseInt(c.getText());
                 String UrlBase = "jdbc:postgresql://localhost:5432/gestion";
                 String driver="org.postgresql.Driver";
                 String user = "postgres";
                 String MDP="****";
     
     
     
     
     
                 String selectSQL = "SELECT nom ,image FROM x WHERE code = ?";
     
                 Connection conn = DriverManager.getConnection(UrlBase, user,MDP);
     
                 PreparedStatement preparedStatement = conn.prepareStatement(selectSQL);
                 preparedStatement.setInt(1, cc);
     
     
                  ResultSet rs = preparedStatement.executeQuery();
     
     
     
                               while (rs.next()) {
     
                                   System.out.println("je suis la");
       try(InputStream userid = rs.getBinaryStream("image");
            FileOutputStream outputStream =  new FileOutputStream(new File(new File(System.getProperty("user.home"), "Documents"), "s.docx")); ) {
    	final byte[] bytes = new byte[1024];
            for (int read = userid.read(bytes); read!=-1; read = userid.read(bytes)) {
                 outputStream.write(bytes, 0, read);
            }
       } catch (IOException ex) {
           Logger.getLogger(Dossier.class.getName()).log(Level.SEVERE, null, ex);
       }
    } 
     
             } catch (SQLException ex) {
                 Logger.getLogger(Dossier.class.getName()).log(Level.SEVERE, null, ex);
             }

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Tu es sûr que c'est un docx dans le blob ?

  8. #8
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 464
    Points : 203
    Points
    203
    Par défaut
    j'ai tenté d'ouvrir un pdf ,c'est bon ça marche trés bien merci bcp vous m'avez sauvé!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Forms6I] charger un fichier texte dans une table
    Par Herveg dans le forum PL/SQL
    Réponses: 2
    Dernier message: 26/02/2010, 09h28
  2. charger les données d'un fichier .txt dans une table
    Par lemerite dans le forum Développement
    Réponses: 6
    Dernier message: 10/09/2008, 18h33
  3. enregistrer fichier csv dans une table
    Par decksroy dans le forum Forms
    Réponses: 14
    Dernier message: 28/02/2008, 19h16
  4. Charger Fichiers XML dans une table avec SQL*LOADER
    Par devdev2003 dans le forum SQL
    Réponses: 2
    Dernier message: 14/01/2008, 10h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo