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

Hibernate Java Discussion :

enregistrement d'un fichier dans un blob


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 38
    Par défaut enregistrement d'un fichier dans un blob
    bonjour,

    je vous explique mon problème :
    j'ai une table qui contient un champs de type BLOB (oracle)
    je veux enregistrer un fichier dans ce blob, j'ai donc un formulaire avec un champs de type FormFile (Struts), à partir de ce champs je crée le blob associé à l'aide de la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Blob blob = hibernate.createBlob(_form.getDescriptionFile().getInputStream());
    puis j'enregistre l'objet dans la base de données.
    J'ai alors l'exception
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    java.sql.SQLException: opération interdite: streams type cannot be used in batching
    	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
    	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
    	at oracle.jdbc.driver.OraclePreparedStatement.addBatch(OraclePreparedStatement.java:4073)
    	at org.hibernate.jdbc.BatchingBatcher.addToBatch(BatchingBatcher.java:29)
    	at org.hibernate.persister.entity.BasicEntityPersister.update(BasicEntityPersister.java:1982)
    Ce qui est vraiment "bizarre" c'est que cette exception n'est pas levée pour les fichier texte ou gif mais elle est levée pour les fichiers jpg, html et doc par exemple.

    Si quelqu'un à une idée....

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 38
    Par défaut
    j'ai ajouté cette ligne dans le fichier "hibernate.cfg.xml"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <property name="hibernate.jdbc.batch_size">0</property>
    l'exception n'est plus levée lors de l'update mais le blob n'est pas enregistré dans la table et lors de l'insertion j'ai une autre exception
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     java.sql.SQLException: Il n'y a plus de données à lire dans le socket
    un peu d'aide serait vraiment la bienvenue

  3. #3
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Comment as tu mappé ton blob dans ton objet, montre nopus ton fichier de mapping ça nous parlera peut être un peu plus. Usuellement, je mappe mes blobs sous forme de tableau de byte

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 38
    Par défaut
    je mappe mon blob comme çà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <property name="description"
                  column="DESC_VERSION_LOGICIEL"
                  type="blob"/>
    si je le mappe comme tu dis avec un tableau de byte j'ai l'exception suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.sql.SQLException: La taille des données est supérieure à la taille max. pour ce type: 24064
    il me semblait que la taille des données était de 4Go

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 38
    Par défaut
    en ajoutant les deux lignes suivantes dans le fichier hibernate.cfg.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <property name="hibernate.jdbc.batch_size">0</property>
    <property name="hibernate.jdbc.use_streams_for_binary">true</property>
    je n'ai plus l'exception précédente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.sql.SQLException: La taille des données est supérieure à la taille max. pour ce type: 24064
    mais par contre mes fichiers contiennent que des carrés

    comment faut-il faire pour que les données contenus dans le byte[] soient lu correctement?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 38
    Par défaut
    problème résolu
    pour info : la limitation des données pour les blobs était due au driver utilisé (thin)

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

Discussions similaires

  1. enregistrement d'un fichier dans la memoire
    Par bobkorn dans le forum Langage
    Réponses: 1
    Dernier message: 21/04/2008, 18h33
  2. [BLOB]Charger un fichier dans un BLOB
    Par elitost dans le forum SQL
    Réponses: 0
    Dernier message: 07/02/2008, 12h29
  3. Insertion d'un fichier dans un BLOB qui ne marche pas
    Par Invité dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 15/11/2007, 19h57
  4. Inserer un fichier dans un Blob?
    Par phpaide dans le forum JDBC
    Réponses: 3
    Dernier message: 05/07/2007, 12h01
  5. Réponses: 6
    Dernier message: 23/11/2006, 16h19

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