Si necesitas un código de programación en específico, escríbeme al formulario de contacto.

BUSCA TU CÓDIGO


BUSCA MÁS CÓDIGOS DE PROGRAMACIÓN AQUÍ:

▷ Código JAVA: Guardar imagen en una Base de datos


Código JAVA anterior: 
Colocar icono en un JButton y un JLabel.
-------------------------------------------------------------------------------------------
Este artículo está orientado a la aplicación e implementación de unas líneas de código JAVA, que nos permitirán almacenar y/o guardar una imagen, en el campo de una tabla, en nuestra base de datos.
Esto es sumamente útil a la hora de desarrollar una aplicación donde necesitemos recopilar información (de personas, animales, artículos o enseres) en formato imagen, como por ejemplo; la foto de una persona, el logo de una empresa, etc.:

Clase Java (MetodosBD.java):
package Metodos; 

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException; 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.swing.JOptionPane; 
 
public class MetodosBD {
    
Pool metodospool = new Pool();
    
public int Guardar(String nombres, String apellidos, String email, String celular, 
                   String direccion, String sexo, String foto){

int resultado = 0;
File archivofoto = new File(foto);

Connection con = null;

String SSQL = "INSERT INTO contacto (nombres, apellidos, email, celular, direccion, sexo, foto) "
            + "VALUES (?, ?, ?, ?, ?, ?, ?)";


    try {
        
        FileInputStream convertir_imagen = new FileInputStream (archivofoto);
        con = metodospool.dataSource.getConnection();
        
        PreparedStatement psql = con.prepareStatement(SSQL);
        psql.setString(1, nombres);
        psql.setString(2, apellidos);
        psql.setString(3, email);
        psql.setString(4, celular);
        psql.setString(5, direccion);
        psql.setString(6, sexo);
        psql.setBlob(7, convertir_imagen, archivofoto.length());
        
        resultado = psql.executeUpdate();
        
        psql.close();
                    
    } catch (SQLException e) {
    
        JOptionPane.showMessageDialog(null, "Error al intentar almacenar la información:\n"
                                     + e, "Error en la operación", JOptionPane.ERROR_MESSAGE);
        
    } catch (FileNotFoundException ex) {
    
        JOptionPane.showMessageDialog(null, "Error al intentar almacenar la información (Imagen):\n"
                                     + ex, "Error en la operación", JOptionPane.ERROR_MESSAGE);
    
    }finally{
    
        try {
            
            if(con!=null){
            
                con.close();
                
            }
            
        } catch (SQLException ex) {
        
            JOptionPane.showMessageDialog(null, "Error al intentar cerrar la conexión:\n"
                                     + ex, "Error en la operación", JOptionPane.ERROR_MESSAGE);
            
        }
    
    }

    return resultado;
    
}    
    
  
}
      


Instrucciones y Recomendaciones 


En un post anterior, estuvimos viendo el método que nos permite guardar información en una base de datos desde JAVA; por lo cual, en esta oportunidad, sólo te mostraremos las modificaciones que debes hacerle a dicho código, para que puedas almacenar imágenes en tu base de datos.
Dichas modificaciones están resaltadas en "color azul".




1. Lo primero que tendrás que preparar y/o realizar, será crear un campo en una tabla de tu base de datos, al cual llamarás "foto" y deberá ser del tipo "BLOB".

2. Procede a copiar y pegar las siguientes librerías (adicionales a las otras ya existentes en tu Clase), la cuales son sumamente necesarias para que el código funcione sin inconvenientes.
Recuerda pegarlas
después de la línea de código que representa el nombre del paquete (ej. package Metodos;) y sobre la línea de código que identifica el nombre de tu Clase (ej. public class MetodosBD{...):

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
3. Adentrándonos ya en el "método Guardar", la primera modificación que encontramos, es la de adicionar un parámetro de tipo "String", llamado "foto"; a través del cual se le estará pasando la ruta de la imagen que queremos guardar (ej. C:\Users\USUARIO\Desktop\logo.jpg):

public int Guardar(String nombres, String apellidos, String email, String celular, 
                   String direccion, String sexo, String foto){     

4. Procederás a crear e instanciar un objeto del tipo "File", y que llamaremos en este caso "archivofoto", y al cual le pasarás como parámetro, valga la redundancia, el parámetro "foto" que creamos en el punto anterior (paso 3). 
Esto nos va a permitir, trabajar con el archivo localizado en la ruta especificada en el parámetro:
File archivofoto = new File(foto); 
5. Ubicándonos en la variable String "SSQL", en la cual establecemos la Sentencia SQL que nos permitirá ejecutar la operación de almacenamiento de información en nuestra base de datos (ver explicación de la estructura en detalle). Procederás a adicionar el campo "foto" (anteponiendo una coma para separarlo del otro campo) que creaste en la tabla de tu base de datos; tal cual como te lo recomendamos en el paso 1 de este post.
También, tienes que adicionar un símbolo de interrogación de cierre (?), igualmente anteponiéndole una coma, para separarlo del anterior:








String SSQL = "INSERT INTO contacto (nombres, apellidos, email, celular, direccion, sexo, foto) "
            + "VALUES (?, ?, ?, ?, ?, ?, ?)";
      

6. Dentro del bloque "try", crearás e instanciarás un objeto del tipo "FileInputStream", y lo llamarás (si así lo deseas) "convertir_imagen". A continuación, deberás pasarle como parámetro, el objeto de tipo "File" "archivofoto".
En esta parte del código, se procede a obtener y/o cargar el archivo (imagen) en forma de bytes:
FileInputStream convertir_imagen = new FileInputStream (archivofoto); 
7. Es hora de darle un valor y/o contenido, al signo de interrogación (?), que pertenece al campo "foto" que adicionamos en la Sentencia SQL (paso 5).
Para ello usamos el objeto "psql" de tipo "PreparedStatement"; seguidamente, le aplicamos el método ".setBlob()" (ya que el campo foto en la tabla de nuestra base de datos es del tipo Blob), a dicho método debemos pasarle 3 parámetros; el primero, es la posición (número) que ocupa el campo en la sentencia SQL establecida anteriormente (paso 5), en este caso es la séptima posición; el segundo, es nuestro objeto "corvertir_imagen", el cual contiene nuestra imagen en forma de bytes; por último, brindamos la información sobre el tamaño en bytes de nuestro archivo imagen, para ello usamos el objeto de tipo "File" llamado "archivofoto", y le aplicamos el método ".length()":
psql.setBlob(7, convertir_imagen, archivofoto.length());
8. La última modificación que debemos realizar al método, será implementar un bloque "catch" adicional al que ya tenemos; esto con el fin de capturar una posible falla, a la hora de cargar nuestra imagen en forma de bytes (paso 6). 
En esta oportunidad, usaremos la excepción del tipo "FileNotFoundException", la cual se producirá si no se encuentra el archivo que se desea cargar; al igual que en cualquier catch, debemos usar una variable para almacenar dicho error, en este caso la variable la hemos llamado "ex".
Para que el usuario sepa que se ha generado un inconveniente, usaremos el componente "JOptionPane", y mostraremos un mensaje añadiéndole la variable (ex) que contiene el error producido: 

} catch (FileNotFoundException ex) {
    
     JOptionPane.showMessageDialog(null, "Error al intentar almacenar la información (Imagen):\n"
                                   + ex, "Error en la operación", JOptionPane.ERROR_MESSAGE);

9. Ahora sólo basta con ejecutar tu proyecto y hacer las respectivas pruebas:

Clic en JButton para guardar foto de un Suricato sentado








¿Quieres aprender más de JAVA?
Si deseas ver cómo llevar a cabo la implementación de este y otros códigos más, usando un IDE como NetBeans, no olvides de revisar los tips de JAVAseguir el Curso: Cómo lo hago en JAVA?

Accede a todos los fragmentos de código que hemos publicado en este lenguaje hasta el momento, dando clic en el siguiente enlace:

Ver listado de códigos JAVA

Suscríbete a nuestro blog, vía Email o RSS; además puedes seguirnos a través de nuestras redes sociales como: Facebook, Twitter, y Google+.

¿Conoces una forma más óptima de realizar el anterior procedimiento?, no dudes en compartir tu conocimiento con todos nuestros amigos de la web.

Si te fue de gran ayuda esta información, no olvides compartirla con tus amigos y en las redes sociales.
Si tienes dudas o sugerencias al respecto; puedes dejarnos tus comentarios.
Bendiciones...





Comparte este código


9 comentarios:

  1. que escribo dentro del boton guardar para que guarde la foto.

    ResponderBorrar
    Respuestas
    1. Saludo estimado Rodrigo.

      Primero en la clase donde está tu botón, deberás instanciar un objeto de la clase MetodosBD, ej:

      MetodosBD metodosbd = new MetodosBD();

      Luego dentro del método del botón, usarás el objeto instanciado y llamarás el método guardar, al cual le pasarás los datos que desear almacenar en tu Base de Datos, ej:

      metodosbd.Guardar("nombres", "apellidos", "email", "celular",
      "dirección", "sexo", "fotos/archivo_imagen.jpg");

      ¡CRISTO TE AMA!

      Bendiciones...

      Borrar
    2. Saludos Eduardo lo que pasa es que todo esta bien pero eso no se parece a lo que nos muestras en el video del boton guardar mira el codigo es algo asi
      MetodoGuardarProductos GP = new MetodoGuardarProductos();

      int exito = GP.GuardarProductos(txtCProducto.getText(), txtNonProducto.getText(), txtProvedor.getText(),
      txtNoProductos.getText(), txtCostoCompra.getText(), txtPrecioPublico.getText(), btnCargarfoto.getText());


      COMO PUEDES VER LA PREGUNTA ES COMO SE HACE QUE AL PRECIONAR GUARDAR LA IMAGEN SE GUARDE EN LA BASE PORQUE ESA PARTE ES LA QUE ME FALTA
      DE ANTE MANO ESPERO PUEDAS AYUDARME GRACIAS

      Borrar
    3. Saludos Estimado Omar Cortés.

      Estoy viendo que en el método guardar, el último parámetro que estás pasando es el texto del botón que carga la foto; es decir, tú lo tienes así: btnCargarfoto.getText()
      Eso nunca te va a funcionar, allí el parámetro que tienes que pasar como lo indico en el comentario de arriba, debe ser la URL de la imagen (ruta del archivo en tu PC).

      Revisa tu código y me comentas.

      Bendiciones...

      Borrar
    4. Saludos Estimado Eduardo.
      Pongo de la siguiente mi codigo de mi boton guardar y me sale un error al dar click en guardar
      el error en el cach dice: import java.io.FileNotFoudExeption:‪C:\Users\Omar GC\Pictures\boton triangulo.png(El nombre del archivo, el nombre de directorio o la sintaxis de la etiqueta del volumen no son correctos )

      Ya por ultimo se puede por ejemplo mi programa es un almacen que cada producto tenga su imageen con este metodo?


      private void btnGuardarProductosActionPerformed(java.awt.event.ActionEvent evt) {

      MetodosBD_Almacen GP = new MetodosBD_Almacen();

      int exito = GP.GuardarProductos(txtCProducto.getText(), txtNonProducto.getText(), txtProvedor.getText(),
      txtNoProductos.getText(), txtCostoCompra.getText(), txtPrecioPublico.getText(), "‪‪‪C:\\Users\\Omar GC\\Pictures\\boton play3.jpg");

      Borrar
  2. Saludos Estimado Eduardo;

    tengo el siguiente codigo para llamar una imagen almacenada en una BD de MYSQL
    pero me arroja el siguiente error "java.lang.NullPointerException"

    PreparedStatement preparedStatement = con.prepareStatement("select foto from Foto where Cedula =?");
    preparedStatement.setString(1,txtidentificacion.getText());
    ImageIcon foto;
    InputStream is;
    //String nombre;

    ResultSet rs = preparedStatement.executeQuery();

    while(rs.next()){


    is = rs.getBinaryStream(1);
    // nombre = rs.getString(2);

    BufferedImage bi = ImageIO.read(is);
    foto = new ImageIcon(bi);

    Image img = foto.getImage();
    Image newimg = img.getScaledInstance(140, 170, java.awt.Image.SCALE_SMOOTH);

    ImageIcon newicon = new ImageIcon(newimg);

    ima.setIcon(newicon);
    // txtnombre.setText(nombre);
    }
    }catch(IOException | SQLException ex){
    JOptionPane.showMessageDialog(rootPane,"exception: "+ex);
    }

    ResponderBorrar
  3. Tengo el mismo codigo amigo, el error que arroja es que no esta pasando datos. Es null la imagen y es en la parte de
    BufferedImage bi = ImageIO.read(is);

    ResponderBorrar
  4. Estimado Eduardo primeramente agradecido x lo que aprendo de tus blogs, soy nuevo en Java y me e comprometido a desarrollar un sistema para una fundación que ayuda a chicos con problemas de adicciones y mi consulta es como adaptar este ejemplo a mis class Java que tengo.
    Tengo una...

    class personal.java la cual tiene los atributos, aquí esta la variable String foto(tu la agregas en el btnGuardar).
    Esta variable foto la agrego en el constructor de la clase personal y le creo los correspondientes métodos setter y setter.

    Luego tengo un form_personal en el cual tengo el jlabelFoto y el botón guardar, la foto ya la carga correctamente(segui lo de tu blog para cargar foto en jlabel).
    Y por último tengo una class Datos.java en la cual se hacen todas las conexiones y consultas correspondientes a la DB.
    Nose si se entiende la explicación que brinde...
    E intentado de esta forma... e creado la variable String foto en la class personal.java
    En el form_personal creo e instancio un objeto de class personal donde pasó los parámetros correspondientes...
    El problema surge donde crear e instanciar File archivoFoto = New File(foto);
    Espero puedas evacuar mi duda/problema.
    Saludos y bendiciones estimado.

    ResponderBorrar
  5. Hola! Me basé en tu post para hacer un ejemplo con interfaz gráfica en JavaFX para mis clases de programación. Gracias! https://github.com/DavidPerezAlonso/FotoBBDDJFx

    ResponderBorrar