blobs en oracle

oscar
12 de Abril del 2005
hola

no puedo insertar y luego recuperar una imagen en oracle. primero convierto la imagen en un array de bytes. luego lo inserto en oracle con este método:

public static long writeObj(Connection conn, EstrenoCine ec) throws Exception {

long id = getNextSeqVal(conn);
CallableStatement stmt = conn.prepareCall(writeObjSQL); //insert into ...
stmt.setLong(1, id);
stmt.setString(2, ec.getTitulo());
stmt.registerOutParameter(3, java.sql.Types.BLOB);
stmt.executeUpdate();
BLOB blob = (BLOB) stmt.getBlob(3);
OutputStream os = blob.getBinaryOutputStream();
ObjectOutputStream oop = new ObjectOutputStream(os);
oop.writeObject(ec.getImagen()); //es un array de bytes
System.out.println("EL ARRAY DE BYTES OCUPA " + ec.getImagen().length);
oop.flush();
oop.close();
os.close();
stmt.close();
return id;

} // END: writeObj


Creo que me lo inserta bien. Si la imagen ocupa x bytes me inserta alguno más por el chunk size me han dicho.

Luego ya no la puedo recuperar y formar el fichero imagen resultante(me lo crea pero no se puede ver la imagen). lo hago de la siguiente forma una vez que tengo el ResultSet:


BLOB blob = (BLOB)rs.getBlob(3);
System.out.println("LONGITUD DEL BLOB: " + blob.length()); // algún byte más que el array de bytes

InputStream is = blob.getBinaryStream();
ByteArrayOutputStream salida = null;
byte[] respuesta = null;
salida = new ByteArrayOutputStream();

int c;
while((c = is.read())!=-1)
{
salida.write(c);
}
respuesta = salida.toByteArray();
System.out.println("respuesta.length: " + respuesta.length);
convertir2File(respuesta);


Con el metodo getBytes() de blob tampoco me funciona:
// convertir2File(blob.getBytes(1, (int)blob.length()));



El método convertir2File va leyendo el byte[] y escribiendo en un FileOutputStream.

Alguien me puede ayudar y darme un código completo(inserción y recuperación) que le haya funcionado??
Yo quiero insertar jpgs y gifs.

Gracias. (estoy desesperado)