Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   JAVA (https://www.clubdelphi.com/foros/forumdisplay.php?f=16)
-   -   Como recuperar imagen de Mysql en Java? (https://www.clubdelphi.com/foros/showthread.php?t=69747)

lince_36 06-09-2010 00:56:31

Como recuperar imagen de Mysql en Java?
 
Saludos amigos, tengo un sencillo form donde inserto imagenes utilizando un jfilechooser.

Al abrir la imagen con el jfilechooser esta se pinta en un label, esto con el fin de que el usuario pueda estar seguro de que esta imagen es la que quiere o sencillamente para saber si es la correcta.

En la base de datos el campo es del tipo BLOB y estoy utilizando Mysql.

Al insertar las imagenes estas se guardan como un archivo binario, y segun leei eso es correcto.
Ahora necesito saber como hacerle para recuperar o mas bien traer X imagen y pintarla en un label o en lo que sea.

Esto seria para realizar una consulta, por ejemplo si de un combobox selecciono al usuario XXXX y presiono en Consultar en un jtable me aparecen todos sus datos como nombre,direccion,telefono,etc, mas aparte me gustaria que tambien me aparezca su fotografia en un label.

Entonces esta es mi duda, como hacer para jalar o mostrar esas imagenes que ya tengo en la BD.

Saludos

lince_36 07-09-2010 18:10:36

Lo he intentado de la siguiente forma

Código PHP:

res=sen.executeQuery("SELECT * FROM  fotos;");
          
Image i=null;

    
Blob blob res.getBlob("foto");

ImageIcon image = new ImageIcon(
blob.getBytes(1,(int)blob.length()));


ijavax.imageio.ImageIO.read(blob.getBinaryStream());

label.setIcon(image); 

Y no me hace nada.

Saludos

Negriz 11-09-2010 00:12:13

Hola!
 
Trata con este codigo, recuerdo que lo saque de: http://chuwiki.chuidiang.org pero no encontre el link asi que te dejo el code.
Código:

public javax.swing.ImageIcon getImage(int idClub) {
        javax.swing.ImageIcon image = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            java.sql.Connection conexion = java.sql.DriverManager.getConnection("jdbc:mysql://etc");//Conecta!
            java.sql.Statement s = conexion.createStatement();
            java.sql.PreparedStatement ps;
            String sql = "SELECT IMAGEN FROM TABLA WHERE CONDICION";//Reemplaza tu sql
            ps = conexion.prepareStatement(sql);
            java.sql.ResultSet rs = ps.executeQuery();
            if (rs.next()) {//solo quiero la primera imagen =P
                java.sql.Blob blob = rs.getBlob(1);
                if (blob != null) {
                    java.io.ObjectInputStream ois = new java.io.ObjectInputStream(blob.getBinaryStream());
                    image = (javax.swing.ImageIcon) ois.readObject();
                }
            }
          rs.close();
          conexion.close();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return image;
    }

Por cierto, una sugerencia: controla el tamaño de la imagen ya que es posible que el ImageIcon (o label con icon) supere el tamaño del Blob de mysql en Bytes.

Un saludo.

lince_36 14-09-2010 00:26:41

La solucion a mi problema ya casi la tenia, solo hacia falta agregar algo al query, este queda asi:

Código PHP:

 String id_foto=tes.getText();
        try
{
   
res=sen.executeQuery("SELECT foto FROM fotos where id_foto='" id_foto "'");
            
    if(
res.next())
    {
        
Image i=null;
        
Blob blob res.getBlob("foto");
        
ijavax.imageio.ImageIO.read(blob.getBinaryStream());
        
ImageIcon image = new ImageIcon(i);
        
lbl1.setIcon(image);
    }
}
catch(
Exception e)
{
    
JOptionPane.showMessageDialog(this,e.getMessage());


Y funciona perfecto.

Saludos

lince_36 14-09-2010 00:39:31

Y para controlar el tamaño de la imagen, mas bien para redimensionarla hago lo siguiente:

Código PHP:

if(image.getIconHeight() > 342 || image.getIconWidth() > 230){
               
ImageIcon imageScalada = new ImageIcon(image.getImage().getScaledInstance(90100100));
              
lbl1.setIcon(imageScalada);
            }
           else{
                
lbl1.setIcon(image);
           } 

Y funciona perfecto.

Saludos

Espero que a usuarios futuros les sirva esto.


La franja horaria es GMT +2. Ahora son las 09:49:00.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi