Falha ao converter JtextField em date em Java

Ola pessoal preciso de uma ajuda.

Eu tenho um banco de dados feito no postgresql onde campo chamado “nasc” do tipo DATE.

Tenho um JFrame de cadastro porem ao tentar pegar a Data que vem de um JTextField nao estou conseguindo fazer com ela vire DATE para poder salvar no banco de dados porque por padrao é String.
Agradeceria muita ajuda de vocês.

Criei uma clase de com as entidades do banco como ;

private String nome;
private Date nasc;

e gerei GET e SET

Segue abaixo o meu metodo DAO.

public void CadastrarTeste(Teste teste) throws Exception{

       PreparedStatement p = banco.prepareStatement("Insert into teste (nome,nasc) values(?,?)");
        p.setString(1, teste.getNome());
        
        p.setDate(2,teste.getNasc());
        
        p.executeUpdate();
    }

Agora que entra a parte que estou batendo cabeça.

No jframe que ira salvar o cadastro nao estou conseguindo fazer a parte que converte o jtextfield de string em date.

Botao de salvar;

Teste TesteData = new Teste();

    TesteData.setNome(TxtNome.getText());
    TesteData.setNasc(TxtNascimento.getText());
    
    
    DAOTeste daoTeste = new DAOTeste();
    daoTeste.CadastrarTeste(TesteData);

Experimente dessa forma:

SimpleDateFormat format = new SimpleDateFormat(“dd/MM/yyyy”);
String data = format.parse(suaData);

Ola helcio,

Essa configuração deve ir dentro do botao salvar ou na inicialização do form ?

Tem como você mostrar como ficaria o botao salvar chamando metodo DAO conforme o meu e ja convertendo a data ?

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

    try {
      SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");

Date data = format.parse(TxtNascimento.getText());

    Teste TesteData = new Teste();
    TesteData.setNasc((java.sql.Date) data);


    } catch (Exception e) {
        
        JOptionPane.showMessageDialog(null, "erro:" +e);
    }

ao executar aparece o erro : Erro java.util.Date cannot be cast to java.sql.Date

}

Iai Ninguem ?

Você está tentando fazer um cast de java.util.Date para java.sql.Date e isto não é permitido.

Como você está fazendo tudo na unha, sem usar jpa, provavelmente o valor que você deve passar no parametro é a data no formato ISO … ‘yyyy-MM-dd HH:mm:ss’

Então você pode resgatar o conteudo da sua textField, parsear p/ um Date e depois printar com a mascara ‘yyyy-MM-dd’ no momento que você está setando o parametro…

Veja se assim vai:

public void CadastrarTeste(Teste teste) throws Exception {

	String dataString = teste.getNasc();
	
	SimpleDateFormat formatBR = new SimpleDateFormat("dd/MM/yyyy");
	SimpleDateFormat formatEN = new SimpleDateFormat("yyyy-MM-dd");
	Date data = null;
	
	try {
		data = formatBR.parse(dataString);
	} catch (ParseException e) {
		JOptionPane.showMessageDialog(null, "erro:" +e);
	}
	
	PreparedStatement p = banco.prepareStatement("Insert into teste (nome,nasc) values(?,?)");
    p.setString(1, teste.getNome());
	p.setDate(2,formatEN.format(data));
	p.executeUpdate();

}
1 curtida