Ayuda, mostrar imagen almacenada en mysql y mostrarla en un jlabel

Iniciado por junca15, 1 Octubre 2015, 17:36 PM

0 Miembros y 1 Visitante están viendo este tema.

junca15

Hola amigos, recien estoy empezando en java y me propuse a realizar una base de datos java y myql, pero resulta que me quede en un punto que no se como sulucionar he buscado en foros y videos pero no encuentro la solucion o el error.

es una pequeña aplicacion que registra un producto, y cada vez que registro un producto lo guarda en la base de datos y me muestra en un jtable los datos almacenados en dicha base de datos, en el jtable puedo seleacionar la fila y con clic derecho mostrar en los jtextfiel pero no logro mostrar la foto en un jlabel. acudo a sus ayudas y colaboracion, gracias. anexo proyecto - base de datos.

por favor si se tienen mejoras con mucho gusto son recibidas, estoy con las ganas de aprender.

import clases.conectar;

import javax.swing.filechooser.FileNameExtensionFilter;

import java.io.File;

import java.awt.*;

import java.io.ByteArrayOutputStream;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStream;

import java.sql.*;

import java.text.SimpleDateFormat;

import java.util.*;

import java.util.logging.Level;

import java.util.logging.Logger;

import static javax.print.attribute.Size2DSyntax.MM;

import javax.swing.table.DefaultTableModel;

import java.util.Date;

import java.text.ParseException;

import javax.swing.*;

import javax.swing.filechooser.FileFilter;







/**

*

* @author icore

*/

public class form_internal_productos extends javax.swing.JInternalFrame {



    /**

     * Creates new form form_internal_productos

     */

    public form_internal_productos() {

        initComponents();

        mostrardatos("");



        //ESTE CODIGO ES PARA EL JCOMBOBOX PARA VER LO QUE ESTA EN LA TABLA PROVEDOR       

        try {

        conectar con = new conectar();

        Connection reg = con.conexion();

        t_nombreprovedor.removeAllItems();

        String sql="";

        sql="SELECT * FROM provedor";

            Statement st = reg.createStatement();

            ResultSet rs = st.executeQuery(sql);



            while(rs.next()){

               t_nombreprovedor.addItem(rs.getString("nombreprovedor"));



            }

        } catch (SQLException ex) {

            Logger.getLogger(form_internal_productos.class.getName()).log(Level.SEVERE, null, ex);

        }

    }



    File fichero;



     void mostrardatos (String valor) {

    DefaultTableModel modelo = new DefaultTableModel();

  modelo.addColumn("Serial");

  modelo.addColumn("Placa");

  modelo.addColumn("Tipo");

  modelo.addColumn("Marca");

  modelo.addColumn("Descripcion");

  modelo.addColumn("Cantidad");

  modelo.addColumn("Fecha Compra");

  modelo.addColumn("Agencia");

  modelo.addColumn("Imagen");

    tb_producto.setModel(modelo);

    //aqui es el codigo para la consulta del boton buscar

   String sql="";

    if(valor.equals("")) {

        sql="SELECT * FROM producto";

    }

    else {

        sql="SELECT * FROM producto WHERE serialproducto='"+valor+"'";

    }

    String []datos = new String [9];

        try {

            Statement st = reg.createStatement();

            ResultSet rs = st.executeQuery(sql);

            while(rs.next()){



                datos[0]=rs.getString("serialproducto");

                datos[1]=rs.getString("placaproducto");

                datos[2]=rs.getString("tipoproducto");

                datos[3]=rs.getString("marcaproducto");

                datos[4]=rs.getString("descripcionproducto");

                datos[5]=rs.getString("cantidadproducto");

                datos[6]=rs.getString("fechaproducto");

                datos[7]=rs.getString("nombreprovedor");

                ByteArrayOutputStream ouput = new ByteArrayOutputStream();

                InputStream isdatos = rs.getBinaryStream("fotoproducto");

                 int temp=isdatos.read();

        while(temp>=0)

        {

           ouput.write((char)temp);

           temp=isdatos.read();



        }

        Image imagen=Toolkit.getDefaultToolkit().createImage(ouput.toByteArray());

        imagen=imagen.getScaledInstance(110, 120, 1);

        lblfoto.setIcon(new ImageIcon(imagen));

               // datos[8]=rs.getString("fotoproducto");

                //String cod = t_imagenproducto.getText();



            //agregar la fila

      modelo.addRow(datos);



            }

        } catch (SQLException ex) {

            Logger.getLogger(form_internal_provedor.class.getName()).log(Level.SEVERE, null, ex);

        } catch (IOException ex) {

            Logger.getLogger(form_internal_productos.class.getName()).log(Level.SEVERE, null, ex);

        }



            }



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



        JFileChooser archivo = new JFileChooser();



        archivo.setAcceptAllFileFilterUsed(false);

        FileFilter Filtro1 = new FileNameExtensionFilter("JPG file","jpg");

        FileFilter Filtro2 = new FileNameExtensionFilter("PNG file","png");

        archivo.setFileFilter(Filtro1);

        archivo.addChoosableFileFilter(Filtro2);

        archivo.setDialogTitle("Abrir Archivo");

        File ruta = new File("D:/productos");

        archivo.setCurrentDirectory(ruta);



        int ventana = archivo.showOpenDialog(null);



        if(ventana == JFileChooser.APPROVE_OPTION)

            {



                File file = archivo.getSelectedFile();

                t_imagenproducto.setText(String.valueOf(file));

                Image foto = getToolkit().getImage(t_imagenproducto.getText());

                foto = foto.getScaledInstance(210, 210, Image.SCALE_DEFAULT);

                lblfoto.setIcon(new ImageIcon(foto));

        }

    }



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

        // TODO add your handling code here:

        JTextField txtnomimagen = new JTextField(5);

    }



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

        // TODO add your handling code here:

    }



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



        String sql;

       // fotoproducto=t_imagenproducto.getText();



        sql="INSERT INTO producto (serialproducto,placaproducto,tipoproducto,marcaproducto,descripcionproducto,cantidadproducto,fechaproducto,nombreprovedor,fotoproducto) VALUES (?,?,?,?,?,?,?,?,?)";

        try {

        FileInputStream imagenproducto;

        PreparedStatement pst=reg.prepareStatement(sql);

            pst.setString(1,t_serialproducto.getText());

            pst.setString(2,t_placaproducto.getText());

            pst.setString(3,t_tipoproducto.getText());

            pst.setString(4,t_marcaproducto.getText());

            pst.setString(5,t_descripcionproducto.getText());

            pst.setString(6,t_cantidadproducto.getText());

            pst.setString(7,((JTextField)t_fechaproducto.getDateEditor().getUiComponent()).getText());

            pst.setString(8,t_nombreprovedor.getSelectedItem().toString());

            pst.setString(9, t_imagenproducto.getText());

            imagenproducto = new FileInputStream(t_imagenproducto.getText());

            pst.setBinaryStream(9,imagenproducto);







            int n=pst.executeUpdate();

           if (n>0){

           JOptionPane.showMessageDialog(null,"Registrado con exito");

           //mostrardatos("");

           }

       //  t_imagenproducto.setText(null);

       //  lblfoto.setIcon(null);





        }

          catch (SQLException ex) {

            Logger.getLogger(form_internal_productos.class.getName()).log(Level.SEVERE, null, ex);

         } catch (FileNotFoundException ex) {

            Logger.getLogger(form_internal_productos.class.getName()).log(Level.SEVERE, null, ex);

        }





    }



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

        // TODO add your handling code here:

         int fila = tb_producto.getSelectedRow();

        if (fila>=0) {

            t_serialproducto.setText(tb_producto.getValueAt(fila, 0).toString());

            t_placaproducto.setText(tb_producto.getValueAt(fila, 1).toString());

            t_tipoproducto.setText(tb_producto.getValueAt(fila, 2).toString());

            t_marcaproducto.setText(tb_producto.getValueAt(fila, 3).toString());

            t_descripcionproducto.setText(tb_producto.getValueAt(fila, 4).toString());

            t_cantidadproducto.setText(tb_producto.getValueAt(fila, 5).toString());

            // AQUI PARA MOSTRAR EL DATO DE FECHA DE LA TABLA JAVA EN UN JDATECHOOSER

            SimpleDateFormat formatodeltexto = new SimpleDateFormat("yyyy-MM-dd");

            String fecha = tb_producto.getValueAt(fila, 6).toString().trim();

            Date dato = null;

            try {

                dato = formatodeltexto.parse(fecha);

            }

            catch (ParseException e) {

            e.printStackTrace();

            }

            t_fechaproducto.setDate(dato);

            /////////////////////////HASTA AQUI//////////////////////////

           // t_imagenproducto.setText(tb_producto.getValueAt(fila, 7).toString());

            String img=tb_producto.getValueAt(fila, 8).toString();

            t_imagenproducto.setText(img);

            Image foto = getToolkit().getImage(img);

            foto= foto.getScaledInstance(210, 210, 1);

            lblfoto.setIcon(new ImageIcon(foto));





        }

        else {

            JOptionPane.showMessageDialog(null,"Selecione una fila para Editar");

        }

    }



conectar con = new conectar();

Connection reg = con.conexion();

}

MGGM

Primero recuperas la imagen:

Código (java) [Seleccionar]
// cambiar 'imagen' por el nombre de tu columna o por el índice
InputStream imgstream = rs.getBinaryStream("imagen");


Luego creas la imagen a partir del stream binario de la imagen:

Código (java) [Seleccionar]
Image image = ImageIO.read(imgstream);

Y se la asignas a un JLabel:

Código (java) [Seleccionar]
JLabel lblFoto = new JLabel(new ImageIcon(image));

junca15