Tentando salvar campo Localdate no banco MySql

5 respostas
java
B

Boa noite 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-MMM-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().replaceAll("/", ""), 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.

5 Respostas

M

Não encontrei erro também.
Tente separar a operação para ver o que acontece, as vezes ajuda a clarear.

java.sql.Date dtVencimento = java.sql.Date.valueOf(c.getDataVencimento());stmt.setDate(4,dtVencimento);
B

Boa noite msartor,

Tentei dessa forma porem o mesmo erro persiste… Estou meio sem noção de como descobrir isso… se mais alguem puder ajudar, ficarei sempre grato.

R

Não entendi o motivo pelo qual você está substituindo o caracter “/” por “” no replaceAll(). Acho que não precisa disso, já que você disse que a data digitada foi essa: 01-03-2016

O padrão no DateTimeFormatter deve ser o mesmo que a data digita, então, se você digitou “01-03-2016” no método ofPattern() deve ser: “dd-MM-yyyy” e não "“dd-MMM-yyyy”.

Tenha certeza qual o padrão da data que você está recebendo em jformattedVencimento3.getText(). Ele deve ser igual ao que você setou no método ofPattern().

L

Em sua tabela, o campo dataVencimento está como DATE ou DATETIME? Se for o segundo, deve-se então utilizar o LocalDateTime.

M

Veja se no banco o campo é realmente um Date.

Criado 2 de fevereiro de 2016
Ultima resposta 3 de fev. de 2016
Respostas 5
Participantes 4