Como inserir "Date" no preparedStatement

E aí pessoal!
Eu to com um problema pra adicionar o tipo date no meu INSERT…
Como podem ver, eu quero colocar uma data no meu JTextField e mandar pro banco

try {
            if (campofoto.getText() == null || campofoto.getIcon() == null) {
                JOptionPane.showMessageDialog(null, "Por favor, selecione uma foto!");
            } else {
                PreparedStatement pst = conecta.conn.prepareStatement("INSERT INTO funcionarios (nome, departamento, funcao, telefone, endereco, aniversario, admissao, cpf, rg, cp, pis, eleitor, salario, banco, agencia, conta, imagem) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
                pst.setString(1, camponome.getText());
                pst.setString(2, (String) campodepartamento.getSelectedItem());
                pst.setString(3, (String) campofunc.getSelectedItem());
                pst.setString(4, campotel.getText());
                pst.setString(5, campoendereco.getText());
                pst.setDate(6, Date.valueOf(campoaniversario.getText()));
                pst.setString(7, campoadm.getText());
                pst.setString(8, campocpf.getText());
                pst.setString(9, camporg.getText());
                pst.setString(10, campocp.getText());
                pst.setString(11, campopis.getText());
                pst.setString(12, campoeleitor.getText());
                double num = Double.parseDouble(camposalario.getText());
                pst.setDouble(13, num);
                pst.setString(14, (String) campobanco.getSelectedItem());
                pst.setString(15, campoagencia.getText());
                pst.setString(16, campoconta.getText());
                pst.setBytes(17, person_image);
                pst.executeUpdate();
                JOptionPane.showMessageDialog(rootPane, "Cadastrado com Sucesso");
            }
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(rootPane, "Erro na Inserção de Dados\n ERRO: " + ex);
        }

Tá tudo certinho, só o meu Date que eu não faço ideia de como fazer do jeito certo, já procurei no google, mas sem sucesso…

pst.setDate(6, Date.valueOf(campoaniversario.getText()));

Meu problema é saber o que fazer com essa gracinha acima…

Sendo tipo date do MySQL, uso esse:

stmt.setDate(4, new java.sql.Date(contato.getDataNascimento().getTimeInMillis()));

1 curtida

Cara, eu consegui fazer de um jeito aqui, mas no meu jeito ele só funfa no formato yyyy/MM/dd

Fora desse formato ele não funciona, eu testei já

public class Datas{    
  public String formataDataRetornaBD(String data) throws ParseException{  
        //veja este metodo....ele recebe uma String como dia/mes/ano e retorna ano/mes/dia  
        SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");  
        Date d = df.parse(data);  
        df = new SimpleDateFormat("yyyy-MM-dd");  
        String s = df.format(d);  
        return s;  
    }  
}

Essa transformação deve ser feita antes de você passar os dados para o DAO. De preferência, já ao receber os dados da view.
Outra coisa, o tipo de data esperado pelo preparedstatement setDate é do tipo java.util.Date e esta é a razão pela qual você está tendo tais problemas.
Aprenda do jeito certo e não fique nas gambiarras.