[hibernate][oracle 10g]enregistrer un BLOB

enregistrer un BLOB [hibernate][oracle 10g] - Java - Programmation

Marsh Posté le 26-04-2005 à 14:33:46    

Bonjour,
 
Voila, j'ai un objet SibImage qui contient l'adresse de mon image.  :pt1cable:  
Mon datamodel contient un attribut : SibImage image;
Je crée donc un type hibernate pour pouvoir transfomé mon adresse d'image en BLOB oracle.
 
Voci ma classe SibImageBlobType (seule la méthoe Set nous intéresse) :
 

Code :
  1. public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException {
  2.     if (value == null) {
  3.       // pas d'image
  4.       st.setNull(index, Types.BLOB);
  5.       return;
  6.     }
  7.     InputStream inStream = null;
  8.     try {
  9.       // création d'une connexion vers l'image
  10.       URLConnection urlCnx = ((SibImage) value).getImageUrl().openConnection();
  11.       //récupération du flux
  12.       inStream = urlCnx.getInputStream();
  13.       //    lecture du flux et écriture dans un tableau de bytes
  14.       ByteArrayOutputStream byteArrayStream = new ByteArrayOutputStream(1024);
  15.       for (int val; (val = inStream.read()) != -1;) {
  16.         byteArrayStream.write(val);
  17.       }
  18.       st.setBlob(index, BLOB.empty_lob());
  19. }


 
ca c'est ce qui marche, normal je ne fais rien, mais bon l'insertion d'un blob vide fonctionne correctement.
 
Donc si je rajoute ceci :
 

Code :
  1. public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException {
  2.     if (value == null) {
  3.       // pas d'image
  4.       st.setNull(index, Types.BLOB);
  5.       return;
  6.     }
  7.     InputStream inStream = null;
  8.     try {
  9.       // création d'une connexion vers l'image
  10.       URLConnection urlCnx = ((SibImage) value).getImageUrl().openConnection();
  11.       //récupération du flux
  12.       inStream = urlCnx.getInputStream();
  13.       //    lecture du flux et écriture dans un tableau de bytes
  14.       ByteArrayOutputStream byteArrayStream = new ByteArrayOutputStream(1024);
  15.       for (int val; (val = inStream.read()) != -1;) {
  16.         byteArrayStream.write(val);
  17.       }
  18.             Connection conn = st.getConnection().getMetaData().getConnection();
  19.       BLOB blob = BLOB.createTemporary(conn, false, oracle.sql.BLOB.DURATION_SESSION);
  20.       blob.open(BLOB.MODE_READWRITE);
  21.       OutputStream out = blob.getBinaryOutputStream();
  22.       try {
  23.         out.write(byteArrayStream.toByteArray());
  24.         out.flush();
  25.         out.close();
  26.       }
  27.       catch (IOException e) {
  28.         throw new SQLException("failed write to blob" + e.getMessage());
  29.       }
  30.       blob.close();
  31.       ((oracle.jdbc.OraclePreparedStatement) (st)).setBLOB(index, blob);
  32. }


 
j'obtiens cette erreur :
 

Code :
  1. Caused by: java.lang.NoSuchMethodError: oracle.sql.BLOB.createTemporary(Ljava/sql/Connection;ZI)Loracle/sql/BLOB;
  2.    at fr.ggl.fwk.service.hibernate.types.SibImageBlobType.nullSafeSet(SibImageBlobType.java:119)


 :fou:

Reply

Marsh Posté le 26-04-2005 à 14:33:46   

Reply

Sujets relatifs:

Leave a Replay

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