Este post lo escribo porque he recibido muchas preguntas de como utilizar datos lob, esta dedicado a como almacenar y obtener archivos binarios a y desde una base de datos.
Además para desempolvar un poco este blog.
Para que Damián no se enoje, lo haré con nuestro queridísimo M$ SQLServer, si señores, M$ SQLServer soporta columnas de tipo LOB (Objeto Binario Grande), como casi todos los motores
La tabla de este ejemplo es:
CREATE TABLE [dbo].[tabla] (
[archivo] [image] NULL ,
[id] [bigint] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
import java.io.*;
import java.sql.*;
public class Test {
public static void main(String[] args) throws IOException {
try {
// cargamos el driver y nos conectamos
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
Connection conn = DriverManager .getConnection(
"jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=magmBD",
"sa", "sa");
// ----- PARA GUARDAR
// precompilamos la instrucción de inserción
PreparedStatement pstm = conn
.prepareStatement("INSERT INTO Tabla (id,archivo) VALUES (?,?)");
// seleccionamos el archivo a guardar
File archi = new File("/DB2Install.doc");
InputStream fis = new FileInputStream(archi);
// establecemos el id
pstm.setLong(1, 1);
// establecemos el archivo (columna lob)
pstm.setBinaryStream(2, fis, (int) archi.length());
// ejecutamos la instrucción
pstm.execute();
fis.close(); // cerramos el archivo
// ----- PARA TRAER
// obtenemos la fila que tiene el archivo y nos posicionamos
ResultSet rs = conn.createStatement().executeQuery(
"SELECT archivo FROM tabla WHERE id=1");
rs.next();
// obtenemos acceso a los datos binarios
fis = rs.getBinaryStream(1);
int dato = 0;
// definimos el archivo destino
OutputStream fos = new FileOutputStream("/copiaDB2Install.doc");
// escribimos el archivo
while ((dato = fis.read()) != -1) {
fos.write(dato);
}
fos.flush(); // nos aseguramos que todo se escriba
fos.close(); // cerramos los archivo
fis.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
boila :)
Saludos
Espero que les sea de utilidad
No hay comentarios.:
Publicar un comentario