Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1487 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [Java] Suppression d'un BLOB en base (Oracle 9i)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Java] Suppression d'un BLOB en base (Oracle 9i)

n°204067
Dephi
Posté le 28-08-2002 à 16:53:14  profilanswer
 

Hello,
 
 
Toujours avec mes BLOB et mes CLOB et ca me gonfle...  :fou:  
 
La récupération et le stockage en BD de mes BLOB ont l'air de se faire correctement...
voici le code que j'utilise (on sait jamais, si quelqu'un trouve une erreur...  :??: )
 
Insertion BLOB :

Code :
  1. ResultSet rs = null;
  2.         Statement st = null;
  3.         try {
  4.             st = conn.createStatement();
  5.             String qry = "UPDATE "+table+" SET "+blobField+"=empty_blob() WHERE "+clause;
  6.             st.execute(qry);
  7.             qry = "SELECT "+blobField+" FROM "+table+" WHERE "+clause+" FOR UPDATE";
  8.             st = conn.createStatement();
  9.             rs = st.executeQuery(qry);
  10.             rs.next();
  11.             oracle.sql.BLOB blob = ((oracle.jdbc.OracleResultSet)rs).getBLOB(blobField);
  12.             OutputStream os = blob.getBinaryOutputStream();
  13.   int n;
  14.   byte[] ch = new byte[1024];
  15.   while((n = is.read(ch,0,1024)) > 0) {   // is = InputStream
  16.    os.write(ch,0,n);
  17.   }
  18.             os.flush();
  19.             os.close();
  20.             closeStatement(rs, st);
  21.         } catch (SQLException sqle) {
  22.             closeStatementWithInternCatchException(rs, st);
  23.   throw new DBException(sqle);
  24.         } catch (IOException ioe) {
  25.             closeStatementWithInternCatchException(rs, st);
  26.   throw new DBException("I/O : "+ioe.getMessage());
  27.         }


 
récupération BLOB :

Code :
  1. PreparedStatement ps = null;
  2.         ResultSet rs = null;
  3.         try {
  4.             String qry = "SELECT "+blobField+" FROM "+table+" WHERE "+clause;
  5.             ps = conn.prepareStatement(qry);
  6.             rs = ps.executeQuery();
  7.             if (rs.next() == false) {
  8.                 // pas d'enregistrement trouvé
  9.                 System.out.println("Hu hum.. pas d'enregistrement trouvé dans readOracleBlob()" );
  10.                 return null;
  11.             }
  12.             oracle.sql.BLOB blob=((oracle.jdbc.OracleResultSet)rs).getBLOB(blobField);
  13.             InputStream is = blob.binaryStreamValue();
  14.             return is;
  15.         } catch (SQLException sqle) {
  16.             closeStatementWithInternCatchException(rs, ps);
  17.   throw new DBException(sqle);
  18.         }


 
 
suppression BLOB :
alors là, je bloque un peu...
étant donné qu'Oracle stocke le BLOB a part, pas directement dans la base, je me demande si un  
DELETE FROM DOCUMENTS WHERE DOCid = 10 (le BLOB fait partie de la table DOCUMENTS)
suffit a supprimer ce  :fou: de BLOB ???
 
 
Vous en pensez koi ??
(j'ai du mal a trouver de bonnes URL sur les BLOB sur le net, je suis donc preneur de toutes URL..)
 
Merciiiii !!!!!
 :hello:  
 
 


---------------

mood
Publicité
Posté le 28-08-2002 à 16:53:14  profilanswer
 

n°204068
--greg--
Posté le 28-08-2002 à 16:55:16  profilanswer
 

:heink: t'as essayé?


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
n°204073
Dephi
Posté le 28-08-2002 à 16:58:32  profilanswer
 

Essayé koi ??  :??:  
La suppression via la commande SQL ??
Oui C ce que j'utilise, mais je me prends tellement d'erreurs dans la gueule un peu après suppression d'une ligne contenant un BLOB que je me pose des questions...  :??:


---------------

n°204074
--greg--
Posté le 28-08-2002 à 16:59:37  profilanswer
 

bah ça *devrait* effacer le blob, oui. maintenant ce qu'oracle fait vraiment... prrrt!
 
mais si tu postes pas le code pour le delete, difficile de dire
et c quoi les erreurs?


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
n°204079
Dephi
Posté le 28-08-2002 à 17:03:57  profilanswer
 

Je ne rien de plus que ce que j'ai écrit..
 

Code :
  1. public static void deleteDocument(int docId) throws MyCompanyException {
  2.         Statement st = null;
  3.         String query = "DELETE FROM documents WHERE DOCid = " + docId;
  4.         try {
  5.             st = DBHolder.getInstance().getConnection().createStatement();
  6.             st.execute(query);
  7.             DBHolder.closeStatement(null, st);
  8.         } catch (SQLException sqe) {
  9.             DBHolder.closeStatementWithInternCatchException(null, st);
  10.             throw new DBException(sqe);
  11.         }
  12.     }


 
 
Les erreurs ??
J'ai un peu de tout...  :hap:  

Citation :


javax.servlet.ServletException: Erreur accès Database: SQL Error/Exception d'E/S: Size Data Unit (SDU) mismatch


 
 
 


---------------

n°204087
--greg--
Posté le 28-08-2002 à 17:10:43  profilanswer
 

hola
 
bon c pas pour dire mais la gestion des exceptions est à pleurer. j'ai fait bcp de conneries ds le domaine, j'en fais encore, mais vu le nom de "MyCompanyException", j'ai un frisson: c'est une "politique" de ta boite de gérer ça comme ça? bouh...
 
fait un peu int res = st.executeUpdate déjà, et regarde ce que ça te renvoie(res doit valoir le nbr d'enregistrements affectés par l'update), si t'arrive jusque là.
ensuite, remonte la trace de tes exceptions pour voir ou elle est lancée. evidemment avec une gestion comme ça ça risque de pas etre évident :/
et d'abord elle est lancée ou l'exception?


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
n°204112
Dephi
Posté le 28-08-2002 à 17:26:27  profilanswer
 

--greg-- a écrit a écrit :

hola
 
bon c pas pour dire mais la gestion des exceptions est à pleurer. j'ai fait bcp de conneries ds le domaine, j'en fais encore, mais vu le nom de "MyCompanyException", j'ai un frisson: c'est une "politique" de ta boite de gérer ça comme ça? bouh...
 
fait un peu int res = st.executeUpdate déjà, et regarde ce que ça te renvoie(res doit valoir le nbr d'enregistrements affectés par l'update), si t'arrive jusque là.
ensuite, remonte la trace de tes exceptions pour voir ou elle est lancée. evidemment avec une gestion comme ça ça risque de pas etre évident :/
et d'abord elle est lancée ou l'exception?




 
Arf..
En fait le but est de "pouvoir faire remonter" les exceptions "jusqu'à" un endroit commun (j'arrive pas a m'exprimer... fatigué..) pour pouvoir les traiter "en lots"...
 
En gros MyCompagnieException est la classe mère de toutes les Exceptions possibles...
C ce que l'on faisait dans ma première boite et ca marchait plutot pas mal..
 
 
Je vais tester le coup du nb de lignes supprimés, ca me donnera un peu plus d'infos deja...


---------------


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [Java] Suppression d'un BLOB en base (Oracle 9i)

 

Sujets relatifs
transformation prog java en applet java pr mettre sur internet please[Java] Remplacer un string par un string (Résolu)
[Oracle] Package invalidVC++ WIN32 pas MFC - Acceder a une base MSJET ?
[PHP] Sauvegarder correctement une base de donnée de chez Multimania[Oracle] Optimisation des paramètres Oracle, update de masse
[JAVA, XML]inclure des .xml dans du xml[JAVA/JSP]
[java] peut on passer un tableau en argument d'un constructeur ?fichier base de donnee
Plus de sujets relatifs à : [Java] Suppression d'un BLOB en base (Oracle 9i)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR