crash_tete | Bonjour,
Voila, 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) :
Code :
- 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 :
Code :
- 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 :
Code :
- 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)
|
|