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

Servlets/JSP Java Discussion :

Upload de fichier dans un blob oracle


Sujet :

Servlets/JSP Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Upload de fichier dans un blob oracle
    Bonjour

    Alors pour mon stage je dois faire une interface client,qui lui permet d uploader un fichier(Zip,Doc,Txt ou autre) dans une base de donnee Oracle 10g dans un champ de type BLOB.

    Je fais le traitement avec une servlet.

    Je me sert du prepared statement et mon code se presente comme ca:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    //creation de la ligne d'enregistrement
    Insert into TableFormulaire(idFormulaire int,
                                        nomFormulaire varchar,
                                        imageFormulaire Blob)
    values("id du formulaire","nom du formulmaire",EMPTY_BLOB)
    cPStmt.executeUpdate();
     
    //insertion du fichier client dans le blob vide creer auparavant
     
    "UPDATE tableFormulaire
    set formulaire_fichier_word = ? 
    WHERE formulaire_identifiant="id du formulaire"
    ensuite j ai le choix soit
    cPStmt.setBytes (1,byte[]) ;
    mais oracle ne l'accepte que pour un fichier <= a 4000kb

    donc il me reste la solution
    cPStmt.setBlob (1,blob) ;

    malheuresement je n 'arrive pas a creer mon objet blob.

    Blob blob = null;
    blob.setBytes(1,item.get());
    me genere une exception java.lang.NullPointerException
    alors que mon tableau de byte est rempli

    autrement je me sert d une autre technique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     BLOB image=null;
    	                       /* selection du blob/*
    String Srequete="select ImageFormulaire from TableFormulaire where formulaire_identifiant="id du formulaire"
    cPStmt = gCnx.prepareStatement(Srequete);
    //result set//cRs = cPStmt.executeQuery(); 
     
     
    		  cRs.next();	             		        
    		    image=((OracleResultSet)cRs).getBLOB("imageFormulaire);		           		       
    		           		  image.setBytes(item.get() );
    		           		  cPStmt.close();
    		           		  cRs.close();
    et la lorsque j execute update ili

    Est ce que vous avez deja rencontre se probleme.
    Avez vous une solution???

    Merci d'avance a tt ceux qui prendrons la peine de me repondre.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par ndundux Voir le message
    malheuresement je n 'arrive pas a creer mon objet blob.

    Blob blob = null;
    blob.setBytes(1,item.get());
    me genere une exception java.lang.NullPointerException
    Salut,

    Si tu initialises une variable à null (Blob blob = null) et que tu appelles une méthode sur cette variable, tu auras obligatoirement 1 NullPointException.

    C'est juste pour te faire avancer... mais à part ça je n'ai aucun conseil à te donner car je n'ai jamais utilisé les blob.
    A part peut-être regarder ici :
    http://java.developpez.com/faq/jdbc/?page=types#blob
    http://ricky81.developpez.com/tutoriel/java/jdbc/blob/

    A+

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    merci pour cette reponse.
    Desole de ne pas avoir repondu tt de suite mais j etais sur un autreprob le reste de la journee.

    J'v ai essaye deja les deux techniques de c deux tuto mais apparement cela ne fonctionne pas avec une base Oracle.

    Merci qd meme.

  4. #4
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Salut moi j'ai utilisé ce code :
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    public static void main(String[] args) throws ClassNotFoundException, SQLException{
            String fileName = args.length == 1 ? args[0] : "toto.txt";
            Class.forName("oracle.jdbc.driver.OracleDriver");
            Connection connexion = DriverManager.getConnection("jdbc:oracle:thin@localhost:1521:mydb","sa","");
            PreparedStatement st = connexion.prepareStatement("insert into blobs values(?, ?)");
            st.setLong(1, 1l);
            prepareStatementOracleBlob(st, readFile(fileName), 2);
            st.execute();
            st.close();
            connexion.close();
        }
     
        /**
         * Set a blob into a OraclePreparedStatement.
         * @param st The statement instanceof OraclePreparedStatement
         * @param content The blob content
         * @param index The index of the blob in the sql expression.
         * @throws SQLException If an error occurs while setting blob.
         */
        public static void prepareStatementOracleBlob(PreparedStatement st, byte[] content, int index) throws SQLException{
            if (content == null) {
                st.setNull(index, Types.BINARY);
            } else if (st instanceof oracle.jdbc.OraclePreparedStatement) {
                oracle.jdbc.OraclePreparedStatement ost = (oracle.jdbc.OraclePreparedStatement) st;
                oracle.sql.BLOB blob = oracle.sql.BLOB.createTemporary(st
                        .getConnection(), false, oracle.sql.BLOB.DURATION_SESSION);
     
                blob.open(oracle.sql.BLOB.MODE_READWRITE);
     
                OutputStream out = blob.getBinaryOutputStream();
     
                try {
                    out.write((byte[]) content);
                    out.flush();
                    out.close();
                } catch (IOException e) {
                    throw new SQLException("Failed write to blob " + e.getMessage());
                }
                blob.close();
     
                ost.setBLOB(
                        index,
                        blob);
     
            } else
                throw new InvalidParameterException("The prepared statement is not an instance of oracle.jdbc.OraclePreparedStatement, it is a " + st.getClass());
        }
     
        private static byte[] readFile(String fileName) {
            byte[] content = new byte[0];
            byte[] buffer = new byte[ (int) (5 * Math.pow(2, 20)) ]; // 5 mo
            int read = 0;
            BufferedInputStream bi = null;
            try{
                bi = new BufferedInputStream( new FileInputStream( fileName ) );
                while( ( read = bi.read( buffer ) ) > 0 ){
                    byte[] tmp = content;
                    content = new byte[tmp.length + read];
                    System.arraycopy(tmp, 0, content, 0, tmp.length);
                    System.arraycopy(buffer, 0, content, tmp.length, read);
                }
            }catch (Exception e) {
                e.printStackTrace();
            }finally{
                try{
                    if( bi != null )
                        bi.close();
                }catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return content;
        }

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 53
    Points : 64
    Points
    64

Discussions similaires

  1. enregistrement d'un fichier dans un blob
    Par so007 dans le forum Hibernate
    Réponses: 16
    Dernier message: 20/01/2010, 19h07
  2. [Upload] Uploader un fichier dans un répertoire spé !
    Par .:Djil:. dans le forum Langage
    Réponses: 2
    Dernier message: 11/07/2006, 13h34
  3. upload des fichiers dans mon serveur
    Par abdou.sahraoui dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 29/05/2006, 09h32
  4. [Upload] Problème pour uploader un fichier dans mon code
    Par Peuplarchiste dans le forum Langage
    Réponses: 2
    Dernier message: 27/05/2006, 09h48
  5. [Upload] upload de fichier dans un dossier creer en ligne
    Par jeanfrancois dans le forum Langage
    Réponses: 1
    Dernier message: 20/03/2006, 14h09

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