Tentando salvar campo Localdate no banco MySql
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
Clique aqui para fazer login e interagir na Comunidade :)