En ocaciones nos vemos en la necesidad de guardar una imagen, un pdf, etc. en la base datos y
así mismo extraerlo, por lo tanto en esta entrada les mostraré de una forma genérica como
hacerlo, el código fuente fue probado en Oracle y Mysql, trataré de probarlo en postgresql.
Las versiones de los drivers en las distintas base datos son:
- Oracle: ojdbc14.jar.
- Mysql : mysql-connector-java-5.1.18-bin.jar
Cuando escribo "genérica" me refiero a no usar una clase especifica del driver correspondiente
a la base datos.
Para mostrar como hacerlo he creado un grupo de clases que son:
- Conexion: Esta clase se encarga de la parte de la conexión.
- Archivos: Esta clase contiene dos métodos escribir y obtenerArchivo, que son los encargados
de escribir el archivo en la tabla y de obtener el archivo de la tabla en el orden correspondiente.
- ObtenerPropiedades: Esta clase fue creada para leer el archivo de propiedades.
Las propiedades
contienen los datos tanto como la clase de conexión del driver y los datos necesarios de
acceso como URL, usuario, contraseña.
- PropertyException:Esta clase fue creada para manejar las excepciones si no se encuentra
alguna propiedad requerida.
- Datosblob: Esta clase fue creada como clase principal o de ejecución. En donde para guardar
un archivo nos mostrará un ventana de selección de archivo.
public int escribir(String nombre, String rutaArchivo) {
InputStream entrada = null;
PreparedStatement pst = null;
int ingresados = 0;
try {
File archivo;
String insert;
establecerConexion();
getCon().setAutoCommit(false);
insert = "Insert into ARCHIVOS values(?,?)";
pst = getCon().prepareStatement(insert);
archivo = new File(rutaArchivo);
entrada = new FileInputStream(archivo);
pst.setString(1, nombre.toUpperCase());
pst.setBinaryStream(2, entrada, (int) archivo.length());
ingresados = pst.executeUpdate();
getCon().commit();
} catch (FileNotFoundException ex) {
Logger.getLogger(Archivos.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Archivos.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(Archivos.class.getName()).log(Level.SEVERE, null, ex);
} finally {
try {
if (entrada != null) {
entrada.close();
}
} catch (IOException ex) {
Logger.getLogger(Archivos.class.getName()).log(Level.SEVERE, null, ex);
}
try {
if (pst != null) {
pst.close();
}
} catch (SQLException ex) {
Logger.getLogger(Archivos.class.getName()).log(Level.SEVERE, null, ex);
}
}
return ingresados;
}
public boolean obtenerArchivo(String nombreArchivoBuscar, String nombreArchivoSalida) {
InputStream salida = null;
try {
PreparedStatement pst;
ResultSet rs;
Blob blob;
FileOutputStream archivoSalida;
String select;
byte[] arreglo;
int byteLeidos = 0;
establecerConexion();
getCon().setAutoCommit(false);
select = "select ARCHIVO from ARCHIVOS WHERE NOMBRE=?";
pst = getCon().prepareStatement(select);
pst.setString(1, nombreArchivoBuscar);
rs = pst.executeQuery();
if (rs != null) {
rs.next();
blob = rs.getBlob(1);
salida = blob.getBinaryStream();
arreglo = new byte[2048];
archivoSalida = new FileOutputStream(nombreArchivoSalida);
while ((byteLeidos = salida.read(arreglo)) > -1) {
archivoSalida.write(arreglo, 0, byteLeidos);
}
return true;
} else {
return false;
}
} catch (IOException ex) {
Logger.getLogger(Datosblob.class.getName()).log(Level.SEVERE, null, ex);
return false;
} catch (SQLException ex) {
Logger.getLogger(Datosblob.class.getName()).log(Level.SEVERE, null, ex);
return false;
} finally {
try {
if (salida != null) {
salida.close();
}
} catch (IOException ex) {
Logger.getLogger(Datosblob.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
El que no ama,no ha conocido a Dios;
porque Dios es amor
1ra Juan 4:8
Descargar Fuentes