guardar y leer imagenes en mysql con java jonathanmelgoza

Guardar y Leer Imagenes en Mysql con Java

En este Articulo veremos como Guardar y Leer Imagenes en Mysql con Java, guardar imágenes en una base de datos para su posterior uso es algo fundamental en programación. En resumen veremos los 2 metodos principales que nos permitiran hacer esto, un metodo para guardar una Imagen en la base de datos en un campo de tipo blob, y un metodo que nos permite obtener el contenido de ese campo y convertilo a un arreglo de bytes para su posterior conversion a objeto Image de Java y asi poder escribirlo de nuevo a disco.

Lo que Haremos…

Realizaremos una aplicacion que estara divida en dos partes, en la parte superior podremos seleccionar una imagen de nuestro disco duro, ver una vista previa de la imagen y un boton para guardar en la base de datos. La parte Inferior tendremos una vista previa de todas las imagenes que se encuentran en la base de datos y un boton para leer esa imagen, seleccionar donde queremos guardarla y guardarla en disco.

Tendra el siguiente Aspecto:

Guardar y Leer Imagenes en Mysql con Java 1

Antes de..

El proyecto lo hemos desarrollado con Netbeans y hemos importado el conector de mysql para hacer la conexion con la base de datos. En la Base de Datos existe una tabla llamada Imagenes con los campos: idImagen, imagen y nombre, esta tabla fue realizada con la siguiente instruccion mysql:

[note]El tipo de campo Blob son objetos binarios grandes en los que podemos almacenar Imagenes (en realidad todo tipo de objetos), pero no son los unicos tambien existen TINYBLOB, MEDIUMBLOB and LONGBLOB. Las Diferencias? visita el siguiente enlace.
[/note]

Utilizaremos..

Guardar Imagenes en La Base de Datos

El siguiente metodo recibe una cadena String con la ruta de la imagen en disco y el nombre de la imagen(para cuando se quiera leer y guardar de nuevo a disco), despues se utiliza el metodo setBinaryStream para insertar en la Base de Datos.

Leer Imagenes desde La Base de Datos

El siguiente Metodo devuelve un Arraylist de Objetos tipo Imagen, este tipo Imagen es una clase definida por nosotros para guardar tanto la imagen como el nombre de esta, esta clase la veremos mas adelante. Despues Seleccionamos todas las imagenes y nombres de la base de datos, obtenemos el campo tipo blob y convertimos a imagen, obtenemos el nombre de la imagen y luego los agregamos en nuevo tipo Imagen, este proceso se repite hasta que se agregen todas las imagenes de la base de datos en nuestro ArrayList, luego retornamos esta lista con todas las imagenes y nombres de imagen.

  • Clase Imagen

Nos sirver para guardar la Relacion entre Imagen y nombre de Imagen.

Contrata Hospedaje Web con Dominio Incluido Gratis en DigitalServer!
———

Video

Quieres todo el Codigo del Proyecto?

[lockercat]Descargalo aqui[/lockercat]

Guardar y Leer Imagenes en Mysql con Java

Clic para valorar esta información
[Total: 0 Promedio: 0]

21 comentarios en “Guardar y Leer Imagenes en Mysql con Java”

  1. Hola que tal
    tengo una duda sobre el metodo de lectura
    si la quiero traer hacia un archivo web (jsp)
    tengo que hacer algun paso adicional ya que no lo muestra

    Responder
  2. HOLA, me puedes ayudar para guardar imagenes en la db solo que estoy trabajando en un proyecto web y la parte en donde el usuario debe subir las imagenes no logro hacer esa parte.

    Responder
  3. Hola Jonathan, saludos
    Tengo 2 pc (pc1 y pc2)…cada uno contiene una BD en Mysql…deseo tomar de una tabla el campo foto1 (Imagen) atraves de un query y que con ese campo Imagen hacer un Update en el otro pc2 y actualizar el campo foto2 (Imagen2)…tengo esto del pc1:
    Connecion conecc = new Connecion();
    String query = «select foto1 FROM usuario WHERE num = ‘123456’;
    java.sql.Statement stmt = conecc.conectar().createStatement();
    ResultSet results = stmt.executeQuery(consultaGenerada);
    results.next();
    Blob campo = (Blob) results.getBlob(«foto1»);

    Como sería la conversión de la imagen como tal?
    Necesito que en el query del update me lleve todo el contenido del campo foto1 y pasarla a foto2 del pc2
    Agradezco Jonathan…gracias por tus aportes

    Responder
  4. por buenas practicas de programación regularmente se le asigna un nombre adecuado o referente a cada item del frame ademas de comentar el código para que cualquier programador puede hacer uso de el antemano gracias por el aporte

    Responder
  5. Hola que tal me gusto mucho tu post pero tengo una duda es cualquier tipo de imagen es que solo puedo guardar una imagen en especifico y otras me lanza un error que no puedo guardarla, agradeceria mucho tu ayuda, podrias auxiliarme en eso.

    Responder
  6. hola Jonathan estoy Utilizando tu ejemplo pero tengo un problema al momento de hacer el INSERT me muestra un msg que me dice Data too long for column ‘imagen’ at row 1 no se si es por el tipo de imagen que utilizo que es .jpg y veo que tus imagnes son .png

    Responder
    • Hola Oscarz,

      Al momento de crear tu tabla que tipo de campo utilizaste para tu columna de imagen? Cual es el tamaño de la imagen que quieres insertar?

      TINYBLOB: maximum length of 255 bytes
      BLOB: maximum length of 65,535 bytes
      MEDIUMBLOB: maximum length of 16,777,215 bytes
      LONGBLOB: maximum length of 4,294,967,295 bytes

      Saludos!

  7. en JavaEE, tengo en base de datos un campo para imagen, en java la @Entity class mapea este dato como ( private byte[] foto; ) , en el navegador a través de un controlador y un EJB se leen los datos de la tabla, el dato tipo foto necesito convertirlo a imagen desde la misma entidad es decir que el «get» de foto devuelva un archivo tipo imagen y no byte. alguien conoce como realizar esto?

    Responder
    • Hola Oscar,

      mm no se si entendi bien pero quieres un metodo para convertir de bytes a image no? intenta esto..

      private BufferedImage createImageFromBytes(byte[] imageData) {
      ByteArrayInputStream bais = new ByteArrayInputStream(imageData);
      try {
      return ImageIO.read(bais);
      } catch (IOException e) {
      throw new RuntimeException(e);
      }
      }

      Saludos!

Deja un comentario