Erro Inserir Data Java

13 respostas
java
EderCastro

Ola! Estou começando agora a programar em Java e estou com um problema para inserir um campo com data.

Minha conexão com o banco de dados esta assim:

public class ConexaoClientes {

ConexaoBD conex = new ConexaoBD();

ModeloClientes mod = new ModeloClientes();
public void Salvar(ModeloClientes mod)
{
    conex.conecta();
    try
        {
        PreparedStatement pst = conex.conexao.prepareStatement("Insert into tblClientes (nome_cliente,ativo_cliente,data_cliente) values(?,?,?)");

        pst.setString(1,mod.getNome_cliente());      
        pst.setString(2,mod.getAtivo_cliente());
        pst.setDate(3, new java.sql.Date(mod.getData_cliente().getTime()));
        pst.execute();
        JOptionPane.showMessageDialog(null, "Inserido com Sucesso!");
        }
    catch (SQLException ex)
        {
            JOptionPane.showMessageDialog(null, "Erro ao Inserir!/nErro/;"+ex);
        }
    
    conex.desconecta();
}

No botão do meu formulario esta assim:

if(txtNome.getText().equals("")){

JOptionPane.showMessageDialog(null, Informe o nome do cliente);

txtNome.grabFocus();

}

else{

mod.setNome_cliente(txtNome.getText());

mod.setAtivo_cliente((String) cboAtivo.getSelectedItem());

mod.setData_cliente(txtData.getDate());

control.Salvar(mod);

}

e da erro no mod.setData, não sei oque fazer!!

13 Respostas

Jonathan_Medeiros

Seu campo de data não é do tipo Date?

Se for o caso, você não está passando uma String direto?
Você precisaria transformar a String em Date antes de passar o valor para o seu modelo!

Sem saber exatamente qual o erro que você teve fica dificil deduzir o que pode ser.

EderCastro

Oi Jonathan, bom dia, obrigado por responder.
como eu sou novo no java não sei se estou fazendo correto, no meu form eu adcionei um campo de texto para data, como eu insiro um campo do tipo data e como eu transformo a String em Date?

Jonathan_Medeiros

Qual é o erro que acontece exatamente? compartilha o stack trace do problema!

staroski

Qual o erro?
A variável txtData é de qual tipo?

EderCastro

a data esta assim
private Date data_cliente;

PreparedStatement pst = conex.conexao.prepareStatement(“Insert into tblClientes(nome_cliente, ativo_cliente, data_cliente) values(?,?,?)”);

pst.setString(1,mod.getNome_cliente());      
        pst.setString(2,mod.getAtivo_cliente());
        pst.setDate(3, new java.sql.Date(mod.getData_cliente().getTime()));

esse é o erro que aparece
image

Jonathan_Medeiros

Certo, porém o seu field txtData retorna uma String e não um Date, correto?

Com isso, você precisa antes recuperar a String para depois convertê-la em Date!

Exemplo:

String stringDate = "22/06/2021";  
Date date = new SimpleDateFormat("dd/MM/yyyy").parse(stringDate);

No seu código, algo mais ou menos assim:

String stringDate = txtData.getText();  
Date date = new SimpleDateFormat("dd/MM/yyyy").parse(stringDate);
mod.setData_cliente(date);
EderCastro

Jonathan, colocando como vc me passou ele apresentou esse erro e pediu para circundar com try catch

Jonathan_Medeiros

Para a variável date, você precisa especificar o tipo dela igual no exemplo: Date date ....

Sobre o try/catch, ele se faz necessário pois o parse pode falhar e lançar uma exceção, neste caso você precisaria fazer a tratativa.

EderCastro

Jonathan, cara me desculpe, mas continua com erro, pior que sou totalmente leigo em java, estou aprendendo td agora, então me desculpe mesmo.

o código ficou assim:

String stringDate = txtData.getText();

try {

Date date = new SimpleDateFormat(dd/MM/yyyy).parse(stringDate);

} catch (ParseException ex) {

JOptionPane.showMessageDialog(null, Erro ao inserir data);

}

mod.setData_cliente(date);

mas apresenta esse erro

Jonathan_Medeiros

Tu importou o Date de qual pacote?

Tem que ser o do java.util.Date e não do java.sql.Date!

EderCastro

isso
image

Jonathan_Medeiros

Provavelmente está com conflito, pois você tem um import de java.sql.* que carrega tudo, inclusive o tipo Date.

Neste caso você precisaria deixar o caminho completo do objeto!

Exemplo:
java.util.Date date = …

EderCastro

Obrigado Jonathan, deu certo!!
Valeu a atenção

Criado 20 de junho de 2021
Ultima resposta 23 de jun. de 2021
Respostas 13
Participantes 3