[hibernate][oracle 10g]pb pour enregistrer bl
Crash-tete
Messages postés
8
Statut
Membre
-
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 un mail - Guide
je rencontre le meme problème, pouvez-vous fournir la reference du driver qui corrige le problème?