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 :

[Hibernate]Insertion BLOB Limite


Sujet :

Hibernate Java

  1. #1
    Inactif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 28
    Points : 34
    Points
    34
    Par défaut [Hibernate]Insertion BLOB Limite
    Bonjour ,

    j'ai réussi à insérer des BLOB dans ma base Oracle grâce au code suivant:

    je déclare mon bean simplement avec un attribut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private Blob docContent;
    avec les getter et setter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public Blob getdocContent()
    	{
    		return docContent;
    	}
    public void setPdfContent(Blob pdocContent)
    	{
    		this.docContent = pdocContent;
    	}
    pour setter mon Blob je procède ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     File pdf =new File("path_to_file");
    docs.setdocContent(Hibernate.createBlob(FileUtil
    								.fileToByte(pdf)))
    code de fileToByte():
    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
     
    public static byte[] fileToByte(File file)
    	{
    		byte[] byt = null;
    		try
    		{
    			if(file!=null){
    				FileInputStream fis = new FileInputStream(file);
    				byt = new byte[(int) file.length()];
    				fis.read(byt);
    				fis.close();
    			}
     
     
    		}
    		catch (IOException e)
    		{
    			e.printStackTrace();
     
    		}
    		return byt;
    	}
    Pour le moment ce code ca marche à merveille pourtant j'ai 2 problèmes:
    1-la methode fileToByte() charge le fichier en totalité en mémoire ce qui m'engendre des soucis de mémoire et de performance
    2-le cas d'un fichier de taille supérieur à Integer.MAX_VALUE ca marche pas ( dù à la methode fileToByte() qui prends un int dans byt = new byte[(int) file.length()].

    Avez vous des idées pour resoudre ces problemes ou peut etre une autre solution pour inserer des Blob dans Oracle via Hibernate pour eviter ces 2 problemes .

    Merci d'avance .

    Bonne journée.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Novembre 2010
    Messages : 20
    Points : 12
    Points
    12
    Par défaut reponse
    salut!

    en fait tu essaies de lire un fichier en une seule fois,
    pour répondre à tout les cas possibles, tu dois le lire par petits bouts, par exemple via une boucle 'for' ou 'while'

    regarde ce bout de code, je lis un blob et écris son contenu dans un fichier :

    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
    final byte[] buffer = new byte[8192];
    			final File fichier = new File(cheminComplet);
    			final FileOutputStream fos = new FileOutputStream(fichier);
                InputStream bt;
                try {
                    bt = blob.getBinaryStream();
                    int bytesRead = 0;
                    while ((bytesRead = bt.read(buffer, 0, 8192)) != -1) {
                    	fos.write(buffer, 0, bytesRead);
                    }
                    fos.close();
                    bt.close();
                    return fichier;
                } catch (Exception e) {
                	log.error("Erreur de Cast [Blob To File]!");
                	return null;
                }
    A toi d'adapter cela à tes besoins

Discussions similaires

  1. Insertion Blob + Hibernate
    Par lucienyannick dans le forum Hibernate
    Réponses: 0
    Dernier message: 01/12/2011, 12h40
  2. Insertion BLOB Oracle 9.2 Limité à 4k
    Par plutonium719 dans le forum Persistance des données
    Réponses: 0
    Dernier message: 07/12/2007, 18h17
  3. [Hibernate] Insertion avec paramètres null
    Par kephy dans le forum Hibernate
    Réponses: 5
    Dernier message: 14/02/2007, 09h22
  4. [ Hibernate ] Utilisation de limit possible ?
    Par cicolas dans le forum Hibernate
    Réponses: 2
    Dernier message: 13/06/2006, 10h29
  5. Insertion Blob base Oracle en ADO via DatasetProvider
    Par Creenshaw dans le forum Bases de données
    Réponses: 1
    Dernier message: 05/12/2005, 14h56

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