1
resposta

Construtor com date inserindo errado no banco de dados

Gostaria de uma ajuda. Fiz com uma classe com um construtor com parametro date.

Quando eu coloco para persistir no banco de dados(mysql) persiste a data 1970-01-01. Estou usando o JDBC.

na minha main esta assim

import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.Date;

import models.Reserva;

public class teste1 {

    public static void main(String[] args) {
        ConnectionFactory factory = new ConnectionFactory();
        Connection connection = factory.recuperarConexao();

        ReservaDao reservadao = new ReservaDao(connection);
        Reserva reserva1 = new Reserva(null,new Date(1988-01-01), null, new BigDecimal("800"), "boleto");
        reservadao.salvar(reserva1);
    }

}

qual formato correto para Date é esse mesmo 1988-01-01. no caso yyyy-mm-dd. ?

minha dao

ackage controller;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import models.Reserva;

public class ReservaDao {
    private Connection connection;

    public ReservaDao(Connection connection) {
        this.connection = connection;
    }



    public void salvar(Reserva reserva) {
        try {
            String sql =  "INSERT INTO RESERVAS (DATAENTRADA,DATASAIDA,VALOR,FORMADEPAGAMENTO) VALUES (?, ?, ?, ?)";

            try (PreparedStatement pstm = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {

                pstm.setDate(1, reserva.getDataentrada());
                pstm.setDate(2, reserva.getDatasaida());
                pstm.setBigDecimal(3, reserva.getValor());
                pstm.setString(4, reserva.getFormadepagamento());


                pstm.execute();

                try (ResultSet rst = pstm.getGeneratedKeys()) {
                    while (rst.next()) {
                        reserva.setId(rst.getInt(1));
                    }
                }
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}

reserva

public class Reserva {
    private Integer id;
    private Date dataentrada;
    private Date datasaida;
    private BigDecimal valor;
    private String formadepagamento;

    public Reserva(Integer id, String formadepagamento) {
        super();
        this.id = id;
        this.formadepagamento = formadepagamento;
    }

    public Reserva(Date dataentrada, Date datasaida, BigDecimal valor, String formadepagamento) {
        super();
        //this.id = id;
        this.dataentrada = dataentrada;
        this.datasaida = datasaida;
        this.valor = valor;
        this.formadepagamento = formadepagamento;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Date getDataentrada() {
        return dataentrada;
    }

    public void setDataentrada(Date dataentrada) {
        this.dataentrada = dataentrada;
    }

    public Date getDatasaida() {
        return datasaida;
    }

    public void setDatasaida(Date datasaida) {
        this.datasaida = datasaida;
    }

    public BigDecimal getValor() {
        return valor;
    }

    public void setValor(BigDecimal valor) {
        this.valor = valor;
    }

    public String getFormadepagamento() {
        return formadepagamento;
    }

    public void setFormadepagamento(String formadepagamento) {
        this.formadepagamento = formadepagamento;
    }

}
1 resposta

Olá, Yuri! Tudo bem com você?

Peço desculpa pela demora em responder o seu tópico.

O construtor que você está tentando usar (java.sql.Date(int year, int month, int day)) está depreciado e não é recomendado para uso. Em vez disso, você deve usar o método estático valueOf(String) da classe java.sql.Date, que aceita uma string no formato "yyyy-[m]m-[d]d". Aqui está como você deve criar seu objeto Date:

Reserva reserva1 = new Reserva(null, Date.valueOf("1988-01-01"), null, new BigDecimal("800"), "boleto");

Por favor, note que você deve usar o formato de data "yyyy-[m]m-[d]d" (por exemplo, "1988-01-01") ao usar o método valueOf().

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software