martes, junio 13, 2006

Manipular columnas lob (guardar y obtener un archivo binario en una base de datos)

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.:

Etiquetas

pentaho (45) java (35) eclipse (23) jdbc (14) curso (13) tomcat (13) primefaces (12) db2 (11) mondrian (10) review (10) jsf (9) openI (9) pdi (9) prd (9) libro (8) plugin (8) musql (7) struts (7) javascript (6) spring (6) cdf (5) ctools (5) instalar (5) linux (5) mysql (5) data studio (4) hibernate (4) ireport (4) jasper (4) meteor (4) videocurso (4) eglu (3) eglubi (3) elearning (3) graphite (3) grupo eglu (3) jboos tools (3) mexico (3) openbits (3) packt (3) python (3) undec (3) websphere (3) applet (2) cde (2) dao (2) db2university (2) exelearning (2) flexigrid (2) hadoop (2) iua (2) kettle (2) moodle (2) node (2) olap (2) osbi (2) pivot4j (2) scorm (2) sql (2) stpivot (2) actionscript (1) amazon (1) autenticacion (1) avanzado (1) base de datos (1) big data (1) bigdata (1) bodoc (1) cambiar (1) ccc (1) cdc (1) chat (1) cloud (1) coffeescript (1) control de acceso (1) corti (1) csv (1) cuba (1) curso meteor undec (1) dashboard (1) datamart (1) dataptix.tv (1) datasource (1) datatable (1) db2 ExpressC (1) demonio (1) distancia (1) driver (1) driver jdbc (1) eglufiltertwolist (1) encapsulamiento (1) especialización (1) etl (1) excepciones (1) export (1) faces (1) federación (1) filas afectadas (1) filtertwolist (1) filtrado (1) flegrid (1) flex (1) google (1) google viz (1) hostname (1) html (1) i18n (1) ibm (1) identidad (1) indignación (1) instancias (1) inteligencia de negocios (1) jee (1) jpivot (1) l10n (1) la azada (1) la zaga de los confines (1) layout (1) liberado (1) libre (1) libro promoción (1) lob (1) marktplace (1) menu (1) meteor node javascript google oauth autenticacion (1) mobile (1) mongoDB (1) node.js (1) oauth (1) olap4j (1) open source (1) orm (1) persistencia (1) personalizada (1) prd5 (1) psw (1) publicidad (1) rad6 (1) recursividad (1) reporting (1) rock (1) saiku (1) script (1) servicio (1) sessiontimeout (1) sourceforge (1) spinneta (1) sqlserver (1) ssl (1) taller (1) troyanx (1) ubuntu (1) ucc (1) ui (1) web (1) web console (1) xampp (1) xml (1) xpath (1)

Seguidores