[hibernate][oracle 10g]pb pour enregistrer bl
Crash-tete
Messages postés
8
Date d'inscription
Statut
Membre
Dernière intervention
-
alaink -
alaink -
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) :
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 :
j'obtiens cette erreur :
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:
- [hibernate][oracle 10g]pb pour enregistrer bl
- Audacity enregistrer son pc - Guide
- Comment enregistrer une conversation - Guide
- Enregistrer une musique pour sonnerie - Guide
- Enregistrer son ecran - Guide
- Comment enregistrer une video youtube - Guide
je rencontre le meme problème, pouvez-vous fournir la reference du driver qui corrige le problème?