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

JDBC Java Discussion :

[JDBC][Oracle] Update d'un Blob


Sujet :

JDBC Java

  1. #1
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 73
    Points : 49
    Points
    49
    Par défaut [JDBC][Oracle] Update d'un Blob
    Bonjour à vous

    Je lutte pour mettre à jour un champ Blob dans une base via Java et SQL

    Voici mon 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
     
     
    String requete = "UPDATE APPLICATION.GARANTIE set DOCUMENT = ?, NOMFICHIER = ?, DATE_INSERTION = ? where ID = ? ";
    stmt = conn.prepareStatement(requete); 
     
      try{
     
       String[] tab_idGaranties = idsGarantie.split("_");
          for(int i=0;i<tab_idGaranties.length;i++){
           stmt.setBinaryStream(1, fis, tailleFichier );
           stmt.setString(2, nomFichier);
           stmt.setTimestamp(3,  new Timestamp(Calendar.getInstance().getTimeInMillis()));
           stmt.setLong(4, new Long(tab_idGaranties[i]).longValue());       
           stmt.executeUpdate();        
          }         
     
       conn.commit();
       stmt.clearParameters();
     
      }
      catch(Exception e){  
       System.out.println(e);
      }
      finally{  
       stmt.close();
       conn.close();    
      }
    Si quelqu'un a déjà fait un UPDATE (pas un INSERT) j'voudrais bien savoir comment il a fait (le gars... )

    Merci à vous

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 856
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 856
    Points : 34 380
    Points
    34 380
    Par défaut
    Bonjour,

    quelle est la base de données ?

    Eric

  3. #3
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 73
    Points : 49
    Points
    49
    Par défaut
    Bonjour,

    Il s'agit d'une base Oracle.

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 856
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 856
    Points : 34 380
    Points
    34 380
    Par défaut
    Citation Envoyé par JohnBlatt
    Bonjour,

    Il s'agit d'une base Oracle.
    Malheureusement le code ne fonctionne pas avec Oracle, il faut passer par le type Blob et la méthode setBlob()

    Eric

  5. #5
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 73
    Points : 49
    Points
    49
    Par défaut
    Merci Eric,

    J'vais chercher de ce côté là. Si t'as un exemple sous la main, je suis preneur !

    Merci.

  6. #6
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 73
    Points : 49
    Points
    49
    Par défaut
    J'ai cherché un peu partout, et je ne trouve pas un exemple concret de setBlob sous Oracle. Si quelqu'un a un bout de code, ça m'intéresse.

    Merci

  7. #7
    Membre habitué Avatar de guandal
    Profil pro
    Analyste programmeur
    Inscrit en
    Février 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Février 2006
    Messages : 127
    Points : 168
    Points
    168
    Par défaut
    salut :
    au fait je pense que tu dois devoir caster ton inputStream fis en Blob comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Blob fisBlob = (Blob) fis;
    stmt.setBlob(1, fisBlob);
    sinon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    stmt.setBlob(1, (Blob)fis);
    bon celui la je ne sais pas si ça marche.
    Tiens moi au courant.

  8. #8
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 73
    Points : 49
    Points
    49
    Par défaut
    Merci Guandal

    Je teste de suite et je te tiens au courant.

  9. #9
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 73
    Points : 49
    Points
    49
    Par défaut
    Ca passe à la compilation, mais pas à l'exécution. J'ai un java.lang.ClassCastException: java.io.FileInputStream

  10. #10
    Expert éminent sénior


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 856
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 856
    Points : 34 380
    Points
    34 380
    Par défaut
    Quel driver Oracle utilises-tu ?

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 105
    Points : 55
    Points
    55
    Par défaut
    C'est toujours compliqué avec les blob/clob.
    Il faudrait que tu passes par un reader.
    Je te mets une méthode que j'avais fait pour updater un clob
    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
        public void updateGeometrie(int idgcFac, CLOB clob, Connection conn)
                    throws Exception {
            BufferedReader clobReader = new BufferedReader(clob
                    .getCharacterStream());
            String ligne = null;
            StringBuffer texte = new StringBuffer();
            try {
                while ((ligne = clobReader.readLine()) != null) {
                    texte.append(ligne);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            //préparation de la connexion
            String sqlUpd = "UPDATE INV_FACADE_SIG SET GEOMETRIE = ? "
                    + "WHERE IDGC = ?";
            PreparedStatement statementUpd = conn.prepareStatement(sqlUpd);
            //on met en place les paramètres du statementIns
            StringReader stringReader = new StringReader(texte.toString());
            statementUpd.setCharacterStream(1, stringReader, texte.length());
            statementUpd.setInt(2, idgcFac);
            //exécution de l'instruction
            statementUpd.executeUpdate();
            statementUpd.close();
        }

  12. #12
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 73
    Points : 49
    Points
    49
    Par défaut
    Ricky81 : j'utilise un Driver Oracle

    Mariemor64 : ton code marche sur une base Oracle ?

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 105
    Points : 55
    Points
    55
    Par défaut
    Oui une base Oracle 9i

  14. #14
    Membre habitué Avatar de guandal
    Profil pro
    Analyste programmeur
    Inscrit en
    Février 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Février 2006
    Messages : 127
    Points : 168
    Points
    168
    Par défaut
    Citation Envoyé par JohnBlatt
    Ca passe à la compilation, mais pas à l'exécution. J'ai un java.lang.ClassCastException: java.io.FileInputStream
    c'est sur (I'm sorry).
    Sinon ton code en premier marche tres bien chez moi ,mais avec BD2 avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    stmt.setBinaryStream(1, fis, tailleFichier );
    .
    tailleFichier est un int?

  15. #15
    Expert éminent sénior


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 856
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 856
    Points : 34 380
    Points
    34 380
    Par défaut
    Citation Envoyé par JohnBlatt
    Ricky81 : j'utilise un Driver Oracle
    Oui mais lequel ? Le thin ou l'oci ? Si c'est l'oci, essaye avec le thin.
    Sinon

  16. #16
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 73
    Points : 49
    Points
    49
    Par défaut
    J'utilise le thin Ricky81. Ca ne marche toujours pas.
    J'ai l'impression de monter un peplum alors que je veux juste mettre à jour un Blob dans une table !

  17. #17
    Membre confirmé

    Homme Profil pro
    Chomeur
    Inscrit en
    Juin 2006
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chomeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 347
    Points : 452
    Points
    452
    Par défaut
    "J'utilise le thin Ricky81. Ca ne marche toujours pas.
    J'ai l'impression de monter un peplum alors que je veux juste mettre à jour un Blob dans une table ! "

    As tu fini par trouver?
    Chez moi un simple update passe tres bien (enfin semble passer j'ai pas encore tester le contenu du champs, mais aucune alerte a signaler donc ca doit etre bon):
    "update doc_blob set id_blob = 1, ablob = ? where id_blob = 1"
    et je fixe un nouveau binary stream dans mon prepareStatement
    Pour info j'utilise un jdbc:oracle:thin comme driver (oracle.jdbc.OracleDriver pour la classe) et je suis sur une base oracle 9i
    a+
    Signature à venir...
    Ancienne : Divers NTIC (PHP, Dojo, à venir...) : http://tif44.fr/blog/

Discussions similaires

  1. Update JDBC Oracle qui ne passe pas
    Par JohnMatrix dans le forum JDBC
    Réponses: 2
    Dernier message: 16/08/2007, 09h33
  2. [jdbc][oracle] conversion implicite erronée
    Par Jack Huser dans le forum JDBC
    Réponses: 2
    Dernier message: 30/06/2005, 10h23
  3. [JDBC] [ORACLE] Récupérer Id auto-inséré ???
    Par Bobsinglar dans le forum JDBC
    Réponses: 4
    Dernier message: 30/05/2005, 16h13
  4. [JDBC] [Oracle] Erreur : End of TNS data channel
    Par loicmillion dans le forum JDBC
    Réponses: 2
    Dernier message: 01/02/2005, 14h27
  5. [java][Oracle]Ouvrir un fichier(blob) avec le browser
    Par marsup54 dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 11/09/2003, 13h35

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