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!!
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.
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
?
Qual é o erro que acontece exatamente? compartilha o stack trace do problema!
EderCastro:
da erro no mod.setData
Qual o erro?
A variável txtData
é de qual tipo?
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
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);
Jonathan, colocando como vc me passou ele apresentou esse erro e pediu para circundar com try catch
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.
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
Tu importou o Date
de qual pacote?
Tem que ser o do java.util.Date
e não do java.sql.Date
!
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 = …
Obrigado Jonathan, deu certo!!
Valeu a atenção