Tentando salvar campo Localdate no banco MySql

03/02/2016

2

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

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.
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

static LocalDate MIN
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.
Responder