guardar imagen - java a mysql

buenas gente, estoy empezando en java y tengo un problema cuando quiero guardar una img en mysql, mi codigo se estructura de la siguiente forma:
clase personal
clase datos
clase frm_ABMpersonal

la clase personal contiene el siguiente codigo:

 
    public class Personal {
    private int id;
    private Date fechaIngreso;
    private String nombres;
    private String apellidos;
    private String sexo;
    private int tipoID;
    private int numeroID;
    private int cuit1;
    private int cuit3;
    private Date fechaNacimiento;
    private String domicilio;
    private int codigoFijo;
    private int telFijo;
    private int codigoCelular;
    private int celular;
    private String mail;
    private int profesion;
    private int mp;
    private int trabaja;
    private String dondeTrabaja;
    private String hrLabDesde;
    private String hrLabHasta;
    private int disponibilidadHoraria;
    private String dispHrDesde;
    private String dispHrHasta;
    private int atencion;
    private int turnoM;
    private int turnoT;
    private int turnoN;
    private String observaciones;
//    private String foto;
   

    public Personal(int id, Date fechaIngreso, String nombres, String apellidos,
            String sexo, int tipoID, int numeroID, int cuit1, int cuit3,
            Date fechaNacimiento, String domicilio, int codigoFijo, int telFijo,
            int codigoCelular, int celular, String mail, int profesion, int mp,
            int trabaja, String dondeTrabaja, String hrLabDesde, String hrLabHasta,
            int disponibilidadHoraria, String dispHrDesde, String dispHrHasta,
            int atencion, int turnoM, int turnoT, int turnoN, String observaciones) {
       
        this.id = id;
        this.fechaIngreso = fechaIngreso;
        this.nombres = nombres;
        this.apellidos = apellidos;
        this.sexo = sexo;
        this.tipoID = tipoID;
        this.numeroID = numeroID;
        this.cuit1 = cuit1;
        this.cuit3 = cuit3;
        this.fechaNacimiento = fechaNacimiento;
        this.domicilio = domicilio;
        this.codigoFijo = codigoFijo;
        this.telFijo = telFijo;
        this.codigoCelular = codigoCelular;
        this.celular = celular;
        this.mail = mail;
        this.profesion = profesion;
        this.mp = mp;
        this.trabaja = trabaja;
        this.dondeTrabaja = dondeTrabaja;
        this.hrLabDesde = hrLabDesde;
        this.hrLabHasta = hrLabHasta;
        this.disponibilidadHoraria = disponibilidadHoraria;
        this.dispHrDesde = dispHrDesde;
        this.dispHrHasta = dispHrHasta;
        this.atencion = atencion;
        this.turnoM = turnoM;
        this.turnoT = turnoT;
        this.turnoN = turnoN;
        this.observaciones = observaciones;
//        this.foto = foto;
    }
   
    public int getId(){
        return id;
    }
   
    public void setId(int id){
        this.id = id;
    }

    public Date getFechaIngreso() {
        return fechaIngreso;
    }

    public void setFechaIngreso(Date fechaIngreso) {
        this.fechaIngreso = fechaIngreso;
    }

    public String getNombres() {
        return nombres;
    }

    public void setNombres(String nombres) {
        this.nombres = nombres;
    }

    public String getApellidos() {
        return apellidos;
    }

    public void setApellidos(String apellidos) {
        this.apellidos = apellidos;
    }
   
    public String getSexo() {
        return sexo;
    }

    public void setSexo(String sexo) {
        this.sexo = sexo;
    }

    public int getTipoID() {
        return tipoID;
    }

    public void setTipoID(int tipoID) {
        this.tipoID = tipoID;
    }

    public int getNumeroID() {
        return numeroID;
    }

    public void setNumeroID(int numeroID) {
        this.numeroID = numeroID;
    }

    public int getCuit1() {
        return cuit1;
    }

    public void setCuit1(int cuit1) {
        this.cuit1 = cuit1;
    }

    public int getCuit3() {
        return cuit3;
    }

    public void setCuit3(int cuit3) {
        this.cuit3 = cuit3;
    }

    public Date getFechaNacimiento() {
        return fechaNacimiento;
    }

    public void setFechaNacimiento(Date fechaNacimiento) {
        this.fechaNacimiento = fechaNacimiento;
    }

    public String getDomicilio() {
        return domicilio;
    }

    public void setDomicilio(String domicilio) {
        this.domicilio = domicilio;
    }

    public int getCodigoFijo() {
        return codigoFijo;
    }

    public void setCodigoFijo(int codigoFijo) {
        this.codigoFijo = codigoFijo;
    }

    public int getTelFijo() {
        return telFijo;
    }

    public void setTelFijo(int telFijo) {
        this.telFijo = telFijo;
    }

    public int getCodigoCelular() {
        return codigoCelular;
    }

    public void setCodigoCelular(int codigoCelular) {
        this.codigoCelular = codigoCelular;
    }

    public int getCelular() {
        return celular;
    }

    public void setCelular(int celular) {
        this.celular = celular;
    }

    public String getMail() {
        return mail;
    }

    public void setMail(String mail) {
        this.mail = mail;
    }

    public int getProfesion() {
        return profesion;
    }

    public void setProfesion(int profesion) {
        this.profesion = profesion;
    }      

    public int getMp() {
        return mp;
    }

    public void setMp(int mp) {
        this.mp = mp;
    }

    public int getTrabaja() {
        return trabaja;
    }

    public void setTrabaja(int trabaja) {
        this.trabaja = trabaja;
    }    

    public String getDondeTrabaja() {
        return dondeTrabaja;
    }

    public void setDondeTrabaja(String dondeTrabaja) {
        this.dondeTrabaja = dondeTrabaja;
    }

    public String getHrLabDesde() {
        return hrLabDesde;
    }

    public void setHrLabDesde(String hrLabDesde) {
        this.hrLabDesde = hrLabDesde;
    }

    public String getHrLabHasta() {
        return hrLabHasta;
    }

    public void setHrLabHasta(String hrLabHasta) {
        this.hrLabHasta = hrLabHasta;
    }

    public int getDisponibilidadHoraria() {
        return disponibilidadHoraria;
    }

    public void setDisponibilidadHoraria(int disponibilidadHoraria) {
        this.disponibilidadHoraria = disponibilidadHoraria;
    }

    public String getDispHrDesde() {
        return dispHrDesde;
    }

    public void setDispHrDesde(String dispHrDesde) {
        this.dispHrDesde = dispHrDesde;
    }

    public String getDispHrHasta() {
        return dispHrHasta;
    }

    public void setDispHrHasta(String dispHrHasta) {
        this.dispHrHasta = dispHrHasta;
    }

    public int getAtencion() {
        return atencion;
    }

    public void setAtencion(int atencion) {
        this.atencion = atencion;
    }

    public int getTurnoM() {
        return turnoM;
    }

    public void setTurnoM(int turnoM) {
        this.turnoM = turnoM;
    }

    public int getTurnoT() {
        return turnoT;
    }

    public void setTurnoT(int turnoT) {
        this.turnoT = turnoT;
    }

    public int getTurnoN() {
        return turnoN;
    }

    public void setTurnoN(int turnoN) {
        this.turnoN = turnoN;
    }

    public String getObservaciones() {
        return observaciones;
    }

    public void setObservaciones(String observaciones) {
        this.observaciones = observaciones;
    }
 

en esta clase NO estan agregadas las variables para la imagen

la clase datos contiene el siguiente codigo:

public String agregarPersonal(Personal miPersonal) throws FileNotFoundException {
     
        try {
           
            String sql = "INSERT INTO personal VALUES (?,?,?,?,?,?,?,?,?,?,"
                    + "?,?,?,?,?,?,?,?,?,?,"
                    + "?,?,?,?,?,?,?,?,?,?)";
//                    + "?)";  //31 registros.

            PreparedStatement pst = cn.prepareStatement(sql);

            pst.setString(1, "0");
            pst.setDate(2, miPersonal.getFechaIngreso());
            pst.setString(3, miPersonal.getNombres());
            pst.setString(4, miPersonal.getApellidos());
            pst.setString(5, miPersonal.getSexo());
            pst.setInt(6, miPersonal.getTipoID());
            pst.setInt(7, miPersonal.getNumeroID());
            pst.setInt(8, miPersonal.getCuit1());
            pst.setInt(9, miPersonal.getCuit3());
            pst.setDate(10, miPersonal.getFechaNacimiento());
            pst.setString(11, miPersonal.getDomicilio());
            pst.setInt(12, miPersonal.getCodigoFijo());
            pst.setInt(13, miPersonal.getTelFijo());
            pst.setInt(14, miPersonal.getCodigoCelular());
            pst.setInt(15, miPersonal.getCelular());
            pst.setString(16, miPersonal.getMail());
            pst.setInt(17, miPersonal.getProfesion());
            pst.setInt(18, miPersonal.getMp());
            pst.setInt(19, miPersonal.getTrabaja());
            pst.setString(20, miPersonal.getDondeTrabaja());
            pst.setString(21, miPersonal.getHrLabDesde());
            pst.setString(22, miPersonal.getHrLabHasta());
            pst.setInt(23, miPersonal.getDisponibilidadHoraria());
            pst.setString(24, miPersonal.getDispHrDesde());
            pst.setString(25, miPersonal.getDispHrHasta());
            pst.setInt(26, miPersonal.getAtencion());
            pst.setInt(27, miPersonal.getTurnoM());
            pst.setInt(28, miPersonal.getTurnoT());
            pst.setInt(29, miPersonal.getTurnoN());
            pst.setString(30, miPersonal.getObservaciones());
           
            pst.executeUpdate();

            return "Personal agregado correctamente.";
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null, e, "Error", JOptionPane.ERROR_MESSAGE);
            return "Error al intentar agregar el personal a la Base de Datos.";
        }
    }    

    public String modificarPersonal(Personal miPersonal) {
        try {
            int ID = miPersonal.getId();
            String sql = "UPDATE personal SET "
                    + "nombres = ?, apellidos = ?, sexo = ?, "
                    + "tipoID = ?, numeroId = ?, cc1 = ?, cc3 = ?, feNacimiento = ?, "
                    + "domicilio = ?, codFijo = ?, telFijo = ?, codCelular = ?, "
                    + "celular = ?, mail = ?, profesion = ?, mp = ?, trabaja = ?, "
                    + "dondeTrabaja = ?, hrLabDesde = ?, hrLabHasta = ?, "
                    + "dispHoraria = ?, dispHrDesde = ?, dispHrHasta = ?, atencion = ?, "
                    + "turnoM = ?, turnoT = ?, turnoN = ?, observaciones = ? "
                    + "WHERE ID = '" + ID + "'";

            PreparedStatement pst = cn.prepareStatement(sql);

            pst.setString(1, miPersonal.getNombres().trim());
            pst.setString(2, miPersonal.getApellidos().trim());
            pst.setString(3, miPersonal.getSexo());
            pst.setInt(4, miPersonal.getTipoID());
            pst.setInt(5, miPersonal.getNumeroID());
            pst.setInt(6, miPersonal.getCuit1());
            pst.setInt(7, miPersonal.getCuit3());
            pst.setDate(8, miPersonal.getFechaNacimiento());
            pst.setString(9, miPersonal.getDomicilio());
            pst.setInt(10, miPersonal.getCodigoFijo());
            pst.setInt(11, miPersonal.getTelFijo());
            pst.setInt(12, miPersonal.getCodigoCelular());
            pst.setInt(13, miPersonal.getCelular());
            pst.setString(14, miPersonal.getMail());
            pst.setInt(15, miPersonal.getProfesion());
            pst.setInt(16, miPersonal.getMp());
            pst.setInt(17, miPersonal.getTrabaja());
            pst.setString(18, miPersonal.getDondeTrabaja());
            pst.setString(19, miPersonal.getHrLabDesde());
            pst.setString(20, miPersonal.getHrLabHasta());
            pst.setInt(21, miPersonal.getDisponibilidadHoraria());
            pst.setString(22, miPersonal.getDispHrDesde());
            pst.setString(23, miPersonal.getDispHrHasta());
            pst.setInt(24, miPersonal.getAtencion());
            pst.setInt(25, miPersonal.getTurnoM());
            pst.setInt(26, miPersonal.getTurnoT());
            pst.setInt(27, miPersonal.getTurnoN());
            pst.setString(28, miPersonal.getObservaciones());

            pst.executeUpdate();

            return "Personal modificado correctamente.";
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null, e, "Error", JOptionPane.ERROR_MESSAGE);
            return "Error al intentar modificar el Personal en la Base de Datos.";
        }
    }  

    public String borrarPersonal(String personal) {
        try {
            String sql = "DELETE FROM personal WHERE ID = '" + personal + "'";

            PreparedStatement pst = cn.prepareStatement(sql);

            pst.executeUpdate(sql);

            return "Personal eliminado correctamente.";
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null, e, "Error", JOptionPane.ERROR_MESSAGE);
            return "Error al intentar eliminar el Personal en la Base de Datos.";
        }
    }    

la clase frm_ABMpersonal contiene este codigo:

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

Personal miPersonal = new Personal(
                ID,
                sqlDate,
                txtNombre.getText().trim().toUpperCase(),
                txtApellido.getText().toUpperCase().trim(),
                sexo,
                tipoId,
                numeroId,
                cuitCuil1,
                cuitCuil3,
                sqlDate1,
                txtDomicilio.getText().trim(),
                codFijo,
                telFijo,
                codCelular,
                celular,
                txtMail.getText().trim(),
                profesion,
                mp,
                trabaja,
                txtDondeTrabaja.getText().trim(),
                cmbHorarioLaboralDesde.getSelectedItem().toString(),
                cmbHorarioLaboralHasta.getSelectedItem().toString(),
                disponibilidadHoraria,
                cmbDisponibilidadDesde.getSelectedItem().toString(),
                cmbDisponibilidadHasta.getSelectedItem().toString(),
                atencion,
                turnoM,
                turnoT,
                turnoN,
                txtObservaciones.getText().trim()
        );

        String msg;

        try {
            if (nuevo) {
                msg = misDatos.agregarPersonal(miPersonal);
            } else {
                msg = misDatos.modificarPersonal(miPersonal);
            }
            JOptionPane.showMessageDialog(rootPane, msg);
        } catch (FileNotFoundException e) {
            JOptionPane.showMessageDialog(null, e, "Error", JOptionPane.ERROR_MESSAGE);
        }
       }

/////////////////////////////////////////////////////////////////////////////////////////////
//                     BOTON EXAMINAR
/////////////////////////////////////////////////////////////////////////////////////////////

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

  lblFoto.setIcon(null);
       
        JFileChooser j = new JFileChooser();
        j.setFileSelectionMode(JFileChooser.FILES_ONLY);// selecciona solo archivos y no carpetas
        int estado = j.showOpenDialog(null);
       
        if(estado == JFileChooser.APPROVE_OPTION){
            try {
                fis = new FileInputStream(j.getSelectedFile());
               
                //necesito saber la cantidad de bytes
                this.longitudBytes =(int) j.getSelectedFile().length();
               
                Image icono = ImageIO.read(j.getSelectedFile()).getScaledInstance(lblFoto.getWidth(), lblFoto.getHeight(), Image.SCALE_DEFAULT);
                lblFoto.setIcon(new ImageIcon(icono));
                lblFoto.updateUI();
            } catch (FileNotFoundException ex) {
                Logger.getLogger(frm_ABMPersonal.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(frm_ABMPersonal.class.getName()).log(Level.SEVERE, null, ex);
            }
           
           
        }

//        int resultado;
//
//        CargarFoto miFoto = new CargarFoto();
//
//        FileNameExtensionFilter filtro = new FileNameExtensionFilter("JPG y PNG", "jpg", "png");
//
//        miFoto.jfchCargarFoto.setFileFilter(filtro);
//
//        resultado = miFoto.jfchCargarFoto.showOpenDialog(null);
//
//        if (JFileChooser.APPROVE_OPTION == resultado) {
//            fichero = miFoto.jfchCargarFoto.getSelectedFile();
//
//            try {
//                ImageIcon icon = new ImageIcon(fichero.toString());
//
//                Icon icono = new ImageIcon(icon.getImage().getScaledInstance(lblFoto.getWidth(), lblFoto.getHeight(), Image.SCALE_DEFAULT));
//
//                lblFoto.setText(null);
//                lblFoto.setIcon(icono);
//            } catch (Exception e) {
//                JOptionPane.showMessageDialog(null, "Error al abrir la imagen." + e);
//            }
//        }

este codigo asi como esta, sin los campos para foto, funciona bien.
Lo que quiero saber es como agregar la foto con su correspondiente "ABM y buscar", la foto iria en un Jlabel y acompañado de un JtextField para abrir un JFileChooser (en el codigo hay dos formas de abrir el JFileChooser uno esta comentado)
Espero se entienda algo, y les agradezco de antemano por la ayuda q me puedan brindar. Saludos!

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Rafael Carrillo

usa un arreglo de bytes

el filechooser te ayuda a encontrar la ruta, ahora convierte la imagen a un arreglo de bytes y enviala a la base de datos metida en un insert, sería agregar un tipo de dato mediumblob a la base de datos para la imagen, en si eso es para guardarla.