Tengo un procedimiento pl / sql que devuelve Blob. Así es como lo llamo:
CallableStatement cstmt = null;
Blob blob = null;
cstmt = con.prepareCall("{? = call billing.PREQUEST.GetAttachment(?)}");
cstmt.registerOutParameter(1,
OracleTypes.BLOB);
cstmt.setInt(2, id);
cstmt.execute();
blob = cstmt.getBlob(1);
Ahora quiero obtener un nombre de archivo de blob. ¿Cómo puedo hacer eso?
Respuestas
1 para la respuesta № 1UN BLOB
La columna no almacena un nombre de archivo. Necesita agregar una columna separada de tipo VARCHAR2
para almacenar el nombre del archivo original.
Si está tratando con una base de datos existente que ya contiene una gran cantidad de datos, entonces no tiene suerte. El nombre del archivo no se almacenó y no hay manera de restaurarlo.
0 para la respuesta № 2
Necesitarías cambiar la Blob
en un File
. Prueba este código:
Blob blob = cstmt.getBlob(column);
InputStream in = blob.getBinaryStream();
OutputStream out = new FileOutputStream("OutputFile");
byte[] buff = new byte[4096];
int length = 0;
while ((length = in.read(buff)) != -1) {
out.write(buff, 0, length );
}
// From here, read in the File and just call "getName()"
// Also, make sure to call to close out and in