Erro java.util.Date cannot be cast to java.sql.Date

boa tarde, oque eu posso fazer para resolver esse problema?

Esse é parte que salva

    private void salActionPerformed(java.awt.event.ActionEvent evt) {                                    
        
       Funcionario f = new Funcionario();
       FuncionarioDAO dao = new FuncionarioDAO();
       
       f.setNome_funcionario(nome.getText());
       f.setCpf_funcionario(CPF.getText());
       f.setRg_funcionario(RG.getText());
       f.setEmail_funcionario(email.getText());
       f.setEndereco_funcionario(end.getText());
       f.setTelefone_funcionario(cel.getText());
       f.setTelefone2_funcionario(tel.getText());
       f.setData_nascimento_funcionario((java.sql.Date) (Date) data.getDate());       
       f.setIdade_funcionario(Integer.parseInt(ida.getText()));
       f.setSexo_funcionario(sexo.getSelectedItem().toString());
       f.setTurno(tur.getSelectedItem().toString());
       f.setCargo(car.getSelectedItem().toString());
       f.setSalario(Double.parseDouble(sala.getText()));
       f.setSenha(sen.getText());
       dao.salvar(f);
       
       limpar();
       
       readJTable();
    }                                   

esse é parte que salva na classe DAO

public class FuncionarioDAO {
    public void salvar(Funcionario f){
        
        Connection con = ConnectionFactory.getConnection();
        PreparedStatement stmt = null;

        try {
            stmt = con.prepareStatement("INSERT INTO funcionario(nome_funcionario,email_funcionario,cpf_funcionario,rg_funcionario,data_nascimento_funcionario,idade_funcionario,telefone_funcionario,telefone2_funcionario,endereco_funcionario,sexo_funcionario,turno,cargo,salario,senha,foto_funcionario)VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
            stmt.setString(1, f.getNome_funcionario());
            stmt.setString(2, f.getEmail_funcionario());
            stmt.setString(3, f.getCpf_funcionario());
            stmt.setString(4, f.getRg_funcionario());           
            stmt.setDate(5, new java.sql.Date (f.getData_nascimento_funcionario().getTime()));
            stmt.setInt(6, f.getIdade_funcionario());            
            stmt.setString(7, f.getTelefone_funcionario());
            stmt.setString(8, f.getTelefone2_funcionario());
            stmt.setString(9, f.getEndereco_funcionario());
            stmt.setString(10, f.getSexo_funcionario());
            stmt.setString(11, f.getCargo());
            stmt.setString(12, f.getTurno());            
            stmt.setDouble(13, f.getSalario());
            stmt.setString(14, f.getSenha());
            stmt.setString(15, f.getFoto_funcionario());
            
            
      stmt.executeUpdate();
            
            JOptionPane.showMessageDialog(null,"Cadastrado com sucesso!");
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null,"Erro ao cadastrar: "+ex);
        }finally{
            ConnectionFactory.closeConnection(con, stmt);
        }
 }    

É mala, tem que instanciar um objeto novo mesmo:
new java.sql.Date(utilDate.getTime());
Veja também:

1 curtida

E tem certeza que o cast é necessário nessa linha?

como assim instanciar?

desculpe, como eu tô aprendendo a mexer com java não sei muita coisa.

Instanciar um objeto é cria-lo, usando o comando new.

Nesta linha aqui, você está fazendo um typecast:
f.setData_nascimento_funcionario((java.sql.Date) (Date) data.getDate());

Ou seja, você está dizendo para o Java: “Java, eu tenho certeza que o que retorna do date.getDate() é um objeto do tipo java.sql.Date”. Como é um java.util.Date, o java dispara o erro.

Na verdade, você deve é copiar os dados do java.util.Date para dentro do java.sql.Date. É o que vc faz nessa linha aqui:
stmt.setDate(5, new java.sql.Date (f.getData_nascimento_funcionario().getTime()));

É meio mala, mas o Java realmente tem 2 classes de data praticamente idênticas. É isso que causa toda essa confusão.

1 curtida

então no botão de salvar

f.setData_nascimento_funcionario((java.sql.Date) (Date) data.getDate());

teria que por

f.setData_nascimento_funcionario((java.util.Date) data.getDate());

???

Não. Lembre-se que para instanciar precisa do comando new
Na alternativa que você sugeriu, você está só tentando fazer um typecast.

Pode postar sua classe FuncionarioDao inteira?

sim senhor

package DAO;


import connection.ConnectionFactory;
import java.sql.PreparedStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.*;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import modelo.Funcionario;
import GUI.funcionario;
import java.text.SimpleDateFormat;

/**
 *
 * @author Carlos
 */
public class FuncionarioDAO {
    public void salvar(Funcionario f){
        
        Connection con = ConnectionFactory.getConnection();
        PreparedStatement stmt = null;

        try {
            stmt = con.prepareStatement("INSERT INTO funcionario(nome_funcionario,email_funcionario,cpf_funcionario,rg_funcionario,data_nascimento_funcionario,idade_funcionario,telefone_funcionario,telefone2_funcionario,endereco_funcionario,sexo_funcionario,turno,cargo,salario,senha,foto_funcionario)VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
            stmt.setString(1, f.getNome_funcionario());
            stmt.setString(2, f.getEmail_funcionario());
            stmt.setString(3, f.getCpf_funcionario());
            stmt.setString(4, f.getRg_funcionario());           
            stmt.setDate(5, new java.sql.Date (f.getData_nascimento_funcionario().getTime()));
            stmt.setInt(6, f.getIdade_funcionario());            
            stmt.setString(7, f.getTelefone_funcionario());
            stmt.setString(8, f.getTelefone2_funcionario());
            stmt.setString(9, f.getEndereco_funcionario());
            stmt.setString(10, f.getSexo_funcionario());
            stmt.setString(11, f.getCargo());
            stmt.setString(12, f.getTurno());            
            stmt.setDouble(13, f.getSalario());
            stmt.setString(14, f.getSenha());
            stmt.setString(15, f.getFoto_funcionario());
            
            
      stmt.executeUpdate();
            
            JOptionPane.showMessageDialog(null,"Cadastrado com sucesso!");
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null,"Erro ao cadastrar: "+ex);
        }finally{
            ConnectionFactory.closeConnection(con, stmt);
        }
 }    
    
     public void atualizar(Funcionario f){
        
        Connection con = ConnectionFactory.getConnection();
        PreparedStatement stmt = null;

        try {
            stmt = con.prepareStatement("UPDATE funcionario SET nome_funcionario = ?,email_funcionario= ?,cpf_funcionario = ?,rg_funcionario = ?,data_nascimento_funcionario = ?,idade_funcionario = ?,telefone_funcionario = ?,telefone2_funcionario = ?,endereco_funcionario = ?,sexo_funcionario = ?,turno = ?,cargo = ?,salario = ?,senha = ?,foto_funcionario = ? WHERE id_funcionario = ?");
            stmt.setString(1, f.getNome_funcionario());
            stmt.setString(2, f.getEmail_funcionario());
            stmt.setString(3, f.getCpf_funcionario());
            stmt.setString(4, f.getRg_funcionario());            
            stmt.setDate(5, new java.sql.Date (f.getData_nascimento_funcionario().getTime()));
            stmt.setInt(6, f.getIdade_funcionario());            
            stmt.setString(7, f.getTelefone_funcionario());
            stmt.setString(8, f.getTelefone2_funcionario());
            stmt.setString(9, f.getEndereco_funcionario());
            stmt.setString(10, f.getSexo_funcionario());
            stmt.setString(11, f.getCargo());
            stmt.setString(12, f.getTurno());            
            stmt.setDouble(13, f.getSalario());
            stmt.setString(14, f.getSenha());
            stmt.setString(15, f.getFoto_funcionario());
           
            
        stmt.executeUpdate();
            
            JOptionPane.showMessageDialog(null,"Atualizado com sucesso!");
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null,"Erro ao atualizar: "+ex);
        }finally{
            ConnectionFactory.closeConnection(con, stmt);
        }
 }

     public void excluir(Funcionario f){
        
        Connection con = ConnectionFactory.getConnection();
        PreparedStatement stmt = null;

        try {
            stmt = con.prepareStatement("DELETE FROM funcionario WHERE id_funcionario = ?");        
            stmt.setInt(1, f.getId_funcionario());            
            stmt.executeUpdate();
            
            JOptionPane.showMessageDialog(null,"Deletado com sucesso!");
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null,"Erro ao deletar: "+ex);
        }finally{
            ConnectionFactory.closeConnection(con, stmt);
        }
 }
     
     public List<Funcionario> read(){
    
        Connection con = ConnectionFactory.getConnection();
        PreparedStatement stmt = null;
        ResultSet rs = null;
        
        List<Funcionario> funcionarios = new ArrayList<>();
        
        try {
            stmt = con.prepareStatement("SELECT * FROM funcionario");
            rs = stmt.executeQuery();
                    
            while (rs.next()){
            
                Funcionario f = new Funcionario();
                f.setId_funcionario(rs.getInt("id_funcionario"));
                f.setNome_funcionario(rs.getString("nome_funcionario"));
                f.setEmail_funcionario(rs.getString("email_funcionario"));
                f.setCpf_funcionario(rs.getString("cpf_funcionario"));
                f.setRg_funcionario(rs.getString("rg_funcionario"));
                f.setData_nascimento_funcionario(rs.getDate("data_nascimento_funcionario"));
                f.setIdade_funcionario(rs.getInt("idade_funcionario"));                
                f.setTelefone_funcionario(rs.getString("telefone_funcionario"));
                f.setTelefone2_funcionario(rs.getString("telefone2_funcionario"));
                f.setEndereco_funcionario(rs.getString("endereco_funcionario"));                
                f.setSexo_funcionario(rs.getString("sexo_funcionario"));
                f.setCargo(rs.getString("cargo"));
                f.setTurno(rs.getString("turno"));                
                f.setSalario(rs.getDouble("salario"));
                f.setSenha(rs.getString("senha"));
                f.setFoto_funcionario(rs.getString("foto_funcionario"));
                
                funcionarios.add(f);
            }
            
            
                    } catch (SQLException ex) {
            Logger.getLogger(FuncionarioDAO.class.getName()).log(Level.SEVERE, null, ex);
        }finally{
            ConnectionFactory.closeConnection(con, stmt, rs);
        }
        
        return funcionarios;
    } 
     
     public boolean checkLogin(String Nome_funcionario, String Senha){
    
        Connection con = ConnectionFactory.getConnection();
        PreparedStatement stmt = null;
        ResultSet rs = null;
        boolean check = false;
        
        
        try {
            stmt = con.prepareStatement("SELECT * FROM funcionario WHERE nome_funcionario = ? and senha = ?");
            stmt.setString(1, Nome_funcionario);
            stmt.setString(2, Senha);
            rs = stmt.executeQuery();
                    
            if (rs.next()){
            
                check = true;
                
            }
            
            
                    } catch (SQLException ex) {
            Logger.getLogger(FuncionarioDAO.class.getName()).log(Level.SEVERE, null, ex);
        }finally{
            ConnectionFactory.closeConnection(con, stmt, rs);
        }
        
        return check;
    } 
}

Pode postar também sua classe funcionário?

Alem disso, nessa linha, como foi declarado esse objeto data onde você está dando um getDate()?

package GUI; 

import DAO.FuncionarioDAO;
import java.util.Date;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;
import modelo.Funcionario;



public class funcionario extends javax.swing.JInternalFrame {

    public funcionario() {
        initComponents();
        DefaultTableModel modelo = (DefaultTableModel) jTable1.getModel();
        jTable1.setRowSorter(new TableRowSorter(modelo));

        readJTable();
    }
    public void limpar(){
    
    CPF.setText("");
    RG.setText("");
    cel.setText("");
    data.setDate(null);
    email.setText("");
    end.setText("");
    ida.setText("");
    nome.setText("");
    sala.setText("");
    sen.setText("");
    tel.setText("");

    car.setSelectedItem(null);
    sexo.setSelectedItem(null);
    tur.setSelectedItem(null);
    
    }
    
    public void readJTable(){
        
        DefaultTableModel modelo = (DefaultTableModel) jTable1.getModel();
        modelo.setNumRows(0);
        FuncionarioDAO fdao = new FuncionarioDAO();
        
        for(Funcionario f: fdao.read()){
            
            modelo.addRow(new Object[]{
            
            f.getId_funcionario(),
            f.getNome_funcionario(),
            f.getEmail_funcionario(),
            f.getCpf_funcionario(),
            f.getRg_funcionario(),
            f.getData_nascimento_funcionario(),
            f.getIdade_funcionario(),            
            f.getTelefone_funcionario(),
            f.getTelefone2_funcionario(),
            f.getEndereco_funcionario(),            
            f.getSexo_funcionario(),
            f.getCargo(),
            f.getTurno(),            
            f.getSalario(),
            f.getSenha(),
            f.getFoto_funcionario()
            
            });
        
        }}
    
    public void tabela(){
    
        nome.setText(jTable1.getValueAt(jTable1.getSelectedRow(), 1).toString());
        email.setText(jTable1.getValueAt(jTable1.getSelectedRow(), 2).toString());
	CPF.setText(jTable1.getValueAt(jTable1.getSelectedRow(), 3).toString());
        RG.setText(jTable1.getValueAt(jTable1.getSelectedRow(), 4).toString());
        data.setDate((Date)jTable1.getValueAt(jTable1.getSelectedRow(), 5));
        ida.setText(jTable1.getValueAt(jTable1.getSelectedRow(), 6).toString());
	cel.setText(jTable1.getValueAt(jTable1.getSelectedRow(), 7).toString());
	tel.setText(jTable1.getValueAt(jTable1.getSelectedRow(), 8).toString());
	end.setText(jTable1.getValueAt(jTable1.getSelectedRow(), 9).toString());
        sexo.setSelectedItem(jTable1.getValueAt(jTable1.getSelectedRow(),10).toString());    
	car.setSelectedItem(jTable1.getValueAt(jTable1.getSelectedRow(),11).toString());  
	tur.setSelectedItem(jTable1.getValueAt(jTable1.getSelectedRow(),12).toString());
        sala.setText(jTable1.getValueAt(jTable1.getSelectedRow(),13).toString()); 
	sen.setText( jTable1.getValueAt(jTable1.getSelectedRow(), 14).toString());
    
    }                
    private void salActionPerformed(java.awt.event.ActionEvent evt) {                                    
        
       Funcionario f = new Funcionario();
       FuncionarioDAO dao = new FuncionarioDAO();
       
       f.setNome_funcionario(nome.getText());
       f.setCpf_funcionario(CPF.getText());
       f.setRg_funcionario(RG.getText());
       f.setEmail_funcionario(email.getText());
       f.setEndereco_funcionario(end.getText());
       f.setTelefone_funcionario(cel.getText());
       f.setTelefone2_funcionario(tel.getText());
       f.setData_nascimento_funcionario((java.sql.Date) (Date) data.getDate());       
       f.setIdade_funcionario(Integer.parseInt(ida.getText()));
       f.setSexo_funcionario(sexo.getSelectedItem().toString());
       f.setTurno(tur.getSelectedItem().toString());
       f.setCargo(car.getSelectedItem().toString());
       f.setSalario(Double.parseDouble(sala.getText()));
       f.setSenha(sen.getText());
       dao.salvar(f);
       
       limpar();
       
       readJTable();
    }                                   

    private void ediActionPerformed(java.awt.event.ActionEvent evt) {                                    
        
       if (jTable1.getSelectedRow() != -1) {  
               
       Funcionario f = new Funcionario();
       FuncionarioDAO dao = new FuncionarioDAO();
       
       f.setNome_funcionario(nome.getText());
       f.setCpf_funcionario(CPF.getText());
       f.setRg_funcionario(RG.getText());
       f.setEmail_funcionario(email.getText());
       f.setEndereco_funcionario(end.getText());
       f.setTelefone_funcionario(cel.getText());
       f.setTelefone2_funcionario(tel.getText());
       f.setData_nascimento_funcionario((java.sql.Date) (java.util.Date) data.getDate());
       f.setIdade_funcionario(Integer.parseInt(ida.getText()));
       f.setSexo_funcionario(sexo.getSelectedItem().toString());
       f.setTurno(tur.getSelectedItem().toString());
       f.setCargo(car.getSelectedItem().toString());
       f.setSalario(Double.parseDouble(sala.getText()));
       f.setSenha(sen.getText());
       f.setId_funcionario((int)jTable1.getValueAt(jTable1.getSelectedRow(),0));
       dao.atualizar(f);
       
       limpar();
       
       readJTable();
    }
    }                                   

    private void excActionPerformed(java.awt.event.ActionEvent evt) {                                    
        
        if (jTable1.getSelectedRow() != -1) {  
               
       Funcionario f = new Funcionario();
       FuncionarioDAO dao = new FuncionarioDAO();
       
       f.setId_funcionario((int)jTable1.getValueAt(jTable1.getSelectedRow(),0));
       dao.excluir(f);
       
       limpar();
       
       readJTable();
    }
        
    }                                   

    private void limActionPerformed(java.awt.event.ActionEvent evt) {                                    
        limpar();                
    }                                   

    private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {                                     
       if (jTable1.getSelectedRow() != -1) {
              tabela();
      }
    }                                    

    private void jTable1KeyReleased(java.awt.event.KeyEvent evt) {                                    
      if (jTable1.getSelectedRow() != -1) {
              tabela();
      }
    }                                   


    // Variables declaration - do not modify                     
    private javax.swing.JFormattedTextField CPF;
    private javax.swing.JFormattedTextField RG;
    private javax.swing.JComboBox<String> car;
    private javax.swing.JFormattedTextField cel;
    private com.toedter.calendar.JDateChooser data;
    private javax.swing.JButton edi;
    private javax.swing.JTextField email;
    private javax.swing.JTextField end;
    private javax.swing.JButton exc;
    private javax.swing.JTextField ida;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel10;
    private javax.swing.JLabel jLabel11;
    private javax.swing.JLabel jLabel12;
    private javax.swing.JLabel jLabel13;
    private javax.swing.JLabel jLabel14;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JTable jTable1;
    private javax.swing.JButton lim;
    private javax.swing.JTextField nome;
    private javax.swing.JButton sal;
    private javax.swing.JFormattedTextField sala;
    private javax.swing.JTextField sen;
    private javax.swing.JComboBox<String> sexo;
    private javax.swing.JFormattedTextField tel;
    private javax.swing.JComboBox<String> tur;
    // End of variables declaration                   
}

declarado que vc fala é o tipo no banco de dados? se for ta como Date

Na verdade, eu pedi a classe Funcionario, com “F” maiúsculo.

a sim, desculpe

package modelo;


import java.sql.Date;
import com.toedter.calendar.JDateChooser;




/**
 *
 * @author Carlos
 */
public class Funcionario {
    private int id_funcionario ;
    private String nome_funcionario;
    private String cpf_funcionario;
    private String rg_funcionario;
    private String email_funcionario;
    private String endereco_funcionario	;
    private String telefone_funcionario;
    private String telefone2_funcionario;
    private int idade_funcionario;
    private Date data_nascimento_funcionario;
    private String sexo_funcionario;
    private String turno;
    private String cargo;
    private double salario;
    private String foto_funcionario;
    private String senha;


    

    
    
    public int getId_funcionario() {
        return id_funcionario;
    }

    public void setId_funcionario(int id_funcionario) {
        this.id_funcionario = id_funcionario;
    }

    public String getNome_funcionario() {
        return nome_funcionario;
    }

    public void setNome_funcionario(String nome_funcionario) {
        this.nome_funcionario = nome_funcionario;
    }

    public String getCpf_funcionario() {
        return cpf_funcionario;
    }

    public void setCpf_funcionario(String cpf_funcionario) {
        this.cpf_funcionario = cpf_funcionario;
    }

    public String getRg_funcionario() {
        return rg_funcionario;
    }

    public void setRg_funcionario(String rg_funcionario) {
        this.rg_funcionario = rg_funcionario;
    }

    public String getEmail_funcionario() {
        return email_funcionario;
    }

    public void setEmail_funcionario(String email_funcionario) {
        this.email_funcionario = email_funcionario;
    }

    public String getEndereco_funcionario() {
        return endereco_funcionario;
    }

    public void setEndereco_funcionario(String endereco_funcionario) {
        this.endereco_funcionario = endereco_funcionario;
    }

    public String getTelefone_funcionario() {
        return telefone_funcionario;
    }

    public void setTelefone_funcionario(String telefone_funcionario) {
        this.telefone_funcionario = telefone_funcionario;
    }

    public String getTelefone2_funcionario() {
        return telefone2_funcionario;
    }

    public void setTelefone2_funcionario(String telefone2_funcionario) {
        this.telefone2_funcionario = telefone2_funcionario;
    }

    public int getIdade_funcionario() {
        return idade_funcionario;
    }

    public void setIdade_funcionario(int idade_funcionario) {
        this.idade_funcionario = idade_funcionario;
    }

    public Date getData_nascimento_funcionario() {
        return data_nascimento_funcionario;
    }

    public void setData_nascimento_funcionario(Date data_nascimento_funcionario) {
        this.data_nascimento_funcionario = data_nascimento_funcionario;
    }

    public String getSexo_funcionario() {
        return sexo_funcionario;
    }

    public void setSexo_funcionario(String sexo_funcionario) {
        this.sexo_funcionario = sexo_funcionario;
    }

    public String getTurno() {
        return turno;
    }

    public void setTurno(String turno) {
        this.turno = turno;
    }

    public String getCargo() {
        return cargo;
    }

    public void setCargo(String cargo) {
        this.cargo = cargo;
    }

    public double getSalario() {
        return salario;
    }

    public void setSalario(double salario) {
        this.salario = salario;
    }

    public String getFoto_funcionario() {
        return foto_funcionario;
    }

    public void setFoto_funcionario(String foto_funcionario) {
        this.foto_funcionario = foto_funcionario;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

    
    
    
}