Guardar y Leer Imagenes en Mysql con Java

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:


¿Sabías que?

¿Necesitas aprender algo nuevo ? Ve a Udemy, busca el tema del que quieres aprender, selecciona el curso para ti y continua con tu aprendizaje.

Udemy


create table Imagenes(idImagen int not null auto_increment,imagen blob not null,nombre varchar(30),key(idImagen))engine=Innodb;
[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..


Connection conexion;
    Statement st;
    
    public BaseDatos(String host,String user, String pass){
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conexion = DriverManager.getConnection("jdbc:mysql://"+host+"/pruebas", user, pass); 
            st = conexion.createStatement();
        } catch (Exception ex) {
            Logger.getLogger(BaseDatos.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

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.


public boolean guardarImagen(String ruta,String nombre){
	String insert = "insert into Imagenes(imagen,nombre) values(?,?)";
	FileInputStream fis = null;
	PreparedStatement ps = null;
	try {
		conexion.setAutoCommit(false);
		File file = new File(ruta);
		fis = new FileInputStream(file);
		ps = conexion.prepareStatement(insert);
		ps.setBinaryStream(1,fis,(int)file.length());
		ps.setString(2, nombre);
		ps.executeUpdate();
		conexion.commit();
		return true;
	} catch (Exception ex) {
		Logger.getLogger(BaseDatos.class.getName()).log(Level.SEVERE, null, ex);
	}finally{
		try {
			ps.close();
			fis.close();
		} catch (Exception ex) {
			Logger.getLogger(BaseDatos.class.getName()).log(Level.SEVERE, null, ex);
		}
	}        
	return false;
}

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.


ArrayList < Imagen > getImagenes() {
	ArrayList < Imagen > lista = new ArrayList();
	try {
		ResultSet rs = st.executeQuery("SELECT imagen,nombre FROM Imagenes"); 
		while (rs.next())
		{
			Imagen imagen=new Imagen();
			Blob blob = rs.getBlob("imagen");
			String nombre = rs.getObject("nombre").toString();
			byte[] data = blob.getBytes(1, (int)blob.length());
			BufferedImage img = null;
			try {
				img = ImageIO.read(new ByteArrayInputStream(data));
			} catch (IOException ex) {
				Logger.getLogger(BaseDatos.class.getName()).log(Level.SEVERE, null, ex);
			}
			
			imagen.setImagen(img);
			imagen.setNombre(nombre);
			lista.add(imagen);
		}
		rs.close();
	} catch (SQLException ex) {
		Logger.getLogger(BaseDatos.class.getName()).log(Level.SEVERE, null, ex);
	}
	return lista;
}
  • Clase Imagen

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


public class Imagen {
    Image imagen;
    String nombre;

    public void setImagen(Image imagen) {
        this.imagen = imagen;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public Image getImagen() {
        return imagen;
    }

    public String getNombre() {
        return nombre;
    }
}
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]