Es una aplicacion tipo cliente/servidor.
El caso es que al modificar el producto, me salen todos los datos del producto, incluida la foto que subi con anterioridad a mano a la bd. Este es el codigo que utilizo para el boton examinar:
Código:
Esta es la llamada a la clase en la que paso los atributos:public void actionPerformed(java.awt.event.ActionEvent e) { JFileChooser fileChooser = new JFileChooser(); FileNameExtensionFilter filter = new FileNameExtensionFilter("JPG & GIF", "jpg", "gif"); fileChooser.setFileFilter(filter); fileChooser.setApproveButtonText("Abrir"); int seleccion= fileChooser.showOpenDialog(jInternalFrameProduktuak); if (seleccion== JFileChooser.APPROVE_OPTION){ ImageIcon imagen= new ImageIcon(fileChooser.getSelectedFile().getPath()); if(imagen.getIconHeight()>128 || imagen.getIconWidth()>128){ ImageIcon imageScalada = new ImageIcon(imagen.getImage().getScaledInstance(128, 128, 128)); jLabelImagen.setIcon(imageScalada); }else{ jLabelImagen.setIcon(imagen); } jTextField.setText(fileChooser.getSelectedFile().getPath()); url = fileChooser.getSelectedFile().getPath(); }else if(seleccion== JFileChooser.ERROR_OPTION){ JOptionPane.showMessageDialog( new JPanel(), "Error, vuelve a insertar otra imagen."); } }
Código:
Se supone que hasta aqui me debe coger la nueva imagen, insertarla en un label y escribir la path en otro. Esto me lo hace bien. Ahora en la clase en la que hago la conexion con la bd (en la conexion no tengo problemas) y llamo a la procedura tengo el siguiente codigo:AukeraNagusiak.getUrrunekoObj().ModificarProductos_llamada(Id_producto, jLabelNombre.getText(), url, jTextAreaDescripcion.getText());
Código:
public void ModificarProductos_llamada(int id_producto, String nombre, String url, String descripcion) throws RemoteException{ ResultSet productos= null; CallableStatement s; //FileInputStream fis = null; String sql; try { sql = "{CALL ModificarProducto(?, ?, ?, ?)}"; s = (CallableStatement) o.prepareCall(sql); //fis = new FileInputStream(image); File image = new File("\""+url+"\""); FileInputStream fis = new FileInputStream(image); s.setInt(1, id_producto); s.setString(2, nombre); s.setBinaryStream(3, fis, (int) image.length()); s.setString(4, descripcion); productos= (ResultSet) s.executeQuery(); } catch (SQLException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } }
La url me la pasa bien completa, pero al intentar guardar los cambios me sale el siguiente error:
java.io.FileNotFoundException: "C:\Documents and Settings\Administrador\Mis documentos\imagen.JPG" (El nombre de archivo, directorio o etiqueta del volumen no es válido)
Porque me sale este error si la imagen existe en esta path??
Otra cosa que me inquieta, creo que tiene que ver si no es el fallo, es que en la base de datos, al hacer el update, no se que formato darle al archivo que es de tipo longBlob:
Código:
CREATE PROCEDURE `ModificarProducto`(in id int(11), in nom varchar(20), in imagen longBlob, in des varchar(40)) update prodctos as p SET p.id_producto=id, p.nombre=nom, p.foto=imagen, p.descripcion=desc where p.id_producto=id
Gracias