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

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

Marsh Posté le 28-08-2002 à 16:53:14    

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:  
 
 


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

Reply

Marsh Posté le 28-08-2002 à 16:53:14   

Reply

Marsh Posté le 28-08-2002 à 16:55:16    

:heink: t'as essayé?


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 28-08-2002 à 16:58:32    

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...  :??:


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

Reply

Marsh Posté le 28-08-2002 à 16:59:37    

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!
Reply

Marsh Posté le 28-08-2002 à 17:03:57    

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


 
 
 


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

Reply

Marsh Posté le 28-08-2002 à 17:10:43    

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!
Reply

Marsh Posté le 28-08-2002 à 17:26:27    

--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...


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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed