[hibernate][oracle 10g]pb pour enregistrer bl

Fermé
Crash-tete Messages postés 8 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 13 juillet 2008 - 26 avril 2005 à 14:42
 alaink - 20 juin 2008 à 14:24
Bonjour,

J'ai un objet SibImage qui contient l'adresse de mon image.
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) :

public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException {
    if (value == null) {
      // pas d'image
      st.setNull(index, Types.BLOB);
      return;
    }

    InputStream inStream = null;
    try {

      // création d'une connexion vers l'image
      URLConnection urlCnx = ((SibImage) value).getImageUrl().openConnection();

      //récupération du flux
      inStream = urlCnx.getInputStream();

      //    lecture du flux et écriture dans un tableau de bytes
      ByteArrayOutputStream byteArrayStream = new ByteArrayOutputStream(1024);
      for (int val; (val = inStream.read()) != -1;) {
        byteArrayStream.write(val);
      }
      st.setBlob(index, BLOB.empty_lob());
}


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 :

public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException {
    if (value == null) {
      // pas d'image
      st.setNull(index, Types.BLOB);
      return;
    }

    InputStream inStream = null;
    try {

      // création d'une connexion vers l'image
      URLConnection urlCnx = ((SibImage) value).getImageUrl().openConnection();

      //récupération du flux
      inStream = urlCnx.getInputStream();

      //    lecture du flux et écriture dans un tableau de bytes
      ByteArrayOutputStream byteArrayStream = new ByteArrayOutputStream(1024);
      for (int val; (val = inStream.read()) != -1;) {
        byteArrayStream.write(val);
      }
            Connection conn = st.getConnection().getMetaData().getConnection();

      BLOB blob = BLOB.createTemporary(conn, false, oracle.sql.BLOB.DURATION_SESSION);

      blob.open(BLOB.MODE_READWRITE);

      OutputStream out = blob.getBinaryOutputStream();

      try {
        out.write(byteArrayStream.toByteArray());
        out.flush();
        out.close();
      }
      catch (IOException e) {
        throw new SQLException("failed write to blob" + e.getMessage());
      }

      blob.close();

      ((oracle.jdbc.OraclePreparedStatement) (st)).setBLOB(index, blob);
}


j'obtiens cette erreur :

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

1 réponse

Crash-tete Messages postés 8 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 13 juillet 2008
27 avril 2005 à 11:49
j'ai résolu mon pb c'était un pb de driver qu'il fallait que je change mai s partout ;)
0
Bonjour,
je rencontre le meme problème, pouvez-vous fournir la reference du driver qui corrige le problème?
0