OVH Cloud OVH Cloud

NoSuchMethodError: oracle.sql.BLOB.createTemporary(...)

1 réponse
Avatar
crash_tete
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) :

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)

1 réponse

Avatar
Lionel
wrote:

Caused by: java.lang.NoSuchMethodError:
oracle.sql.BLOB.createTemporary(Ljava/sql/Connection;ZI)Loracle/sql/BLOB;


Quelle version du pilote oracle ?
http://download-east.oracle.com/otn_hosted_doc/jdeveloper/904preview/jdbc-javadoc/oracle/sql/BLOB.html#createTemporary(java.sql.Connection,%20boolean,%2
0int)