Fórum Tentando salvar campo Localdate no banco MySql #544630
03/02/2016
0
Bom dia galera,
Sou novato em Java e estou tentando criar um pequena aplicação Java em Swing, porem tenho tido muita dificuldade ao tentar gravar o campo referente a data, estou trabalhar com o LocalDate porem estou apanhando bastante.
Gostaria se possível de pedir a ajudar dos colegas para sanar essa dúvida, segue abaixo o meu código para um maior entendimento do que preciso.
Tenho uma classe Conta
No meu formulário eu tenho o seguinte código, que é quando o usuário clicará no botão "Salvar".
Minha DAO para salvar no banco
O erro que ocorre é sempre quando eu no botão "Salvar" a conta cadastrada, caindo na exceção criada do tipo DateTimeParseException e retornando o seguinte "Text 01/03/2016 (que é a data que eu digitei) could not be parsed at index 0.
Desde já fico grato com qualquer auxílio.
Sou novato em Java e estou tentando criar um pequena aplicação Java em Swing, porem tenho tido muita dificuldade ao tentar gravar o campo referente a data, estou trabalhar com o LocalDate porem estou apanhando bastante.
Gostaria se possível de pedir a ajudar dos colegas para sanar essa dúvida, segue abaixo o meu código para um maior entendimento do que preciso.
Tenho uma classe Conta
public class Conta {
private int id;
private TipoConta tipoConta;
private int pessoaId;
private double valor;
private LocalDate dataVencimento;
// Getters and setters
No meu formulário eu tenho o seguinte código, que é quando o usuário clicará no botão "Salvar".
if(cbPessoa.equals("") || cbTipoConta.equals("") || jformattedValor.getText().equals("") || jformattedVencimento.equals("")) {
JOptionPane.showMessageDialog(null, "Todos os campos deverão ser devidamente preenchidos para que uma conta seja cadastrada");
}
else {
try {
DateTimeFormatter formatador = DateTimeFormatter.ofPattern("dd-MM-yyyy");
int pessoaId = cbPessoa3.getSelectedIndex();
TipoConta tp = (TipoConta) cbTipoConta.getSelectedItem();
double valor = Double.parseDouble(jformattedValor3.getText().replace("R$","").replaceAll(",", ""));
LocalDate data = LocalDate.parse(jformattedVencimento3.getText(), formatador);
c.setPessoaId(pessoaId);
c.setTipoContaId(tp);
c.setValor(valor);
c.setDataVencimento(data);
ContaDao dao = new ContaDao();
dao.Salvar(c);
}
catch(NumberFormatException | DateTimeParseException erro) {
JOptionPane.showMessageDialog(null, "Erro\n" + erro);
}
catch (SQLException ex) {
Logger.getLogger(FormContas.class.getName()).log(Level.SEVERE, null, ex);
}
}
Minha DAO para salvar no banco
public void Salvar(Conta c) {
String sql = "insert into conta (tipoconta, pessoaId, valor, dataVencimento) VALUES (?,?,?,?)";
try (PreparedStatement stmt = connection.prepareStatement(sql))
{
stmt.setString(1,c.getTipoConta().getDescricao());
stmt.setInt(2,c.getPessoaId());
stmt.setDouble(3,c.getValor());
stmt.setDate(4,java.sql.Date.valueOf(c.getDataVencimento()));
stmt.execute();
stmt.close();
JOptionPane.showMessageDialog(null,"Cadastro de conta realizado com sucesso");
connection.close();
}
catch(SQLException ex) {
JOptionPane.showMessageDialog(null,"Não foi possível cadastrar a conta no banco de dados\n" + ex);
}
}
O erro que ocorre é sempre quando eu no botão "Salvar" a conta cadastrada, caindo na exceção criada do tipo DateTimeParseException e retornando o seguinte "Text 01/03/2016 (que é a data que eu digitei) could not be parsed at index 0.
Desde já fico grato com qualquer auxílio.
Bruno Silva
Curtir tópico
+ 0
Responder
Post mais votado
03/02/2016
Boa tarde, eu olhei nos documentos do SDK do java e vi que LocalDate trabalha com a data de forma diferente, se pode verificar aqui:
https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html
Então vou te sugerir um jeito simples, que eu testei aqui, com o SimpleDateFormat:
O Date é da biblioteca Util do java. É que tem do SQL também, mas use o Date para Strings que vem do JFormatted.
Teste, me fale se deu certo ou não.
https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html
static LocalDate MIN
The minimum supported LocalDate, '-999999999-01-01'.
The minimum supported LocalDate, '-999999999-01-01'.
Então vou te sugerir um jeito simples, que eu testei aqui, com o SimpleDateFormat:
O Date é da biblioteca Util do java. É que tem do SQL também, mas use o Date para Strings que vem do JFormatted.
import java.text.SimpleDateFormat;
import java.util.Date;
SimpleDateFormat sdt = new SimpleDateFormat("dd-MM-yyyy");
Date dataVencimento = new Date(String.valueOf(jformattedVencimento3.getText()));
c.setDataVencimento(sdt.format(dataVencimento));
Teste, me fale se deu certo ou não.
Henrique Andrade
Responder
Gostei + 1
Clique aqui para fazer login e interagir na Comunidade :)