Blob - Insertar y Actualizar Archivo en campo blob. Oracle, Mysql

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.
Exported from Notepad++
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); } } }
Adjunto los fuentes utilizados.


El que no ama,no ha conocido a Dios;
porque Dios es amor
1ra Juan 4:8






Descargar Fuentes
Leer más...