Java - Guardar Imagenes

 
Vista:

Guardar Imagenes

Publicado por Rodney Villamayor (2 intervenciones) el 25/07/2012 19:41:58
Hola a todos!!
Estoy haciendo un trabajo en netbeans y estoy teniendo un pequeño problema:
Tengo un form en el que quiero cargar algunos datos: NombreDeLaEmpresa, Direccion, Telefono y el logotipo de la empresa (aquí es donde radica mi problema).

Para cargar una imagen/logotipo utilizo un JFileChooser.
Tanto la selección del archivo como el mostrar en un jlabel lo hago sin problemas, pero cuando quiero insertar esa imagen a mi bd me tira el error siguiente: "Error reading from InputStream..."
***********************************************************************************************************
Este es mi botón para la selección de un archivo.:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
private void btnCargar_Click(java.awt.event.ActionEvent evt) {
        JFileChooser fc = new JFileChooser();
        FileNameExtensionFilter filtro = new FileNameExtensionFilter("Archivos de Imágenes", "bmp", "gif", "ico", "jpg", "png");
        fc.setFileFilter(filtro);
        fc.setLocation(250, 300);
        int resp = fc.showOpenDialog(this);
        if (resp == JFileChooser.APPROVE_OPTION) {
            try {
                archivo = (fc.getSelectedFile()); 
               imagen = new FileInputStream(archivo);
                String ubicacion = archivo.getAbsolutePath();
                ImageIcon logo = new ImageIcon(ubicacion);
                Icon nuevoLogo = new ImageIcon(logo.getImage().getScaledInstance (txt_logotipo.getWidth(),
                        txt_logotipo.getHeight(), Image.SCALE_DEFAULT));
                txt_logotipo.setIcon(nuevoLogo);
            } catch (FileNotFoundException ex) {
                JOptionPane.showMessageDialog(null, ex, "Error", JOptionPane.ERROR_MESSAGE);
            } finally {
                try {
                    imagen.close();
                } catch (IOException ex) {
                    JOptionPane.showMessageDialog(null, ex, "Error", JOptionPane.ERROR_MESSAGE);
                }
            }
        }
    }

------------------------------------------------------------------------------
Este evento pertenece a un botón que confirma que se guarden los datos a la bd...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private void btnAceptar_Click(java.awt.event.ActionEvent evt) {
 
        try {
            enables(false);
            btn_Cancelar.setEnabled(false);
            String nombreEmpresa = txt_NombreEmpresa.getText();
            String direccion = txt_Direccion.getText();
            String telefono = txt_Telefono.getText();
            String eslogan = txt_Eslogan.getText();
            int ingresado = DataLayer.CargarParametros(nombreEmpresa, direccion, telefono, eslogan, imagen, archivo);
            if (ingresado != 0) {
                JOptionPane.showMessageDialog(null, "Los Cambion fueron guardados exitosamente!!", "suceso", JOptionPane.INFORMATION_MESSAGE);
 
            }
        } catch (Exception exc) {
            JOptionPane.showMessageDialog(null, "Error al intentar Guardar", "Error", JOptionPane.ERROR_MESSAGE);
        }
    }

Cuando le llamo a CargarParametros le envío la imagen (un FileInputStream) y el archivo (File)

---------------------------------------------------------------------------------------
Y este mi método CargarParametros....

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public static int CargarParametros (String empresa, String direccion, String telefono, String eslogan, FileInputStream imagen, File archivo)
    {
        String query = "INSERT INTO parametros (NombreEmpresa, Logotipo, Eslogan, Direccion, NroTelefono) values (?,?,?,?,?)";
        try
        {
            int ingresado = 0;
            conn = obtConexionMySQL();
            pstmt = conn.prepareStatement(query);
                pstmt.setString(1, empresa);
                pstmt.setBinaryStream(2, imagen, (int)archivo.length());
                pstmt.setString(3, eslogan);
                pstmt.setString(4, direccion);
                pstmt.setString(5, telefono);
 
            ingresado = pstmt.executeUpdate();
            return ingresado;
        }
        catch (SQLException exc)
        {
            JOptionPane.showMessageDialog (null, exc, "Error", JOptionPane.ERROR_MESSAGE);
            return 0;
        }
    }


El problema en concreto aparece el la línea: pstmt.setBinaryStream(2, imagen, (int)archivo.length());

Gracias...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Guardar Imagenes

Publicado por chavalchavito (6 intervenciones) el 30/07/2012 00:31:23
ÇNo veo la declaraciion d la variable imagen..
tiene que ser del tipo InputStream,,

private InputStream imagen;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Guardar Imagenes

Publicado por Rodney Villamayor (2 intervenciones) el 30/07/2012 03:58:15
Hola chavalchavito, gracias por contestar!

En realidad en problema estaba en el finally, en donde "cerraba" el objeto, quedando éste en null y luego intentaba cargar a la bd refiriéndome a un objecto inexistente!, así que quité el finally...
Me di cuenta al depurar el archivo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar