2
respostas

LocalDate "Servlet"

Galera tudo bem ? Estou fazendo um sistema de ControleFinanceiro, e um dos campos eu conseguir com algumas pesquisar pegar com o Date.valueOf() e salvar no banco de dados. Porém um outro atributo também estou usando LocalDate, porém eu gostaria de obter o Mês e o Ano... Ja pesquisei alguns lugares mas esta complicado de achar, alguém teve o mesmo problema ou poderia me ajudar ? Agradeço desde já !

Segue os codigos:

package br.com.bruno.model;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.YearMonth;
import java.util.Calendar;

public class Gasto {

    private String nomeGasto;
    private BigDecimal valorDoGasto;
    private LocalDate dataVencimento;
    private LocalDate mesReferencia;
    private boolean status;

    public String getNomeGasto() {
        return nomeGasto;
    }

    public void setNomeGasto(String nomeGasto) {
        this.nomeGasto = nomeGasto;
    }

    public BigDecimal getValorDoGasto() {
        return valorDoGasto;
    }

    public void setValorDoGasto(BigDecimal valorDoGasto) {
        this.valorDoGasto = valorDoGasto;
    }

    public LocalDate getDataVencimento() {
        return dataVencimento;
    }

    public void setDataVencimento(LocalDate dataVencimento) {
        this.dataVencimento = dataVencimento;
    }

    public LocalDate getMesReferencia() {
        return mesReferencia;
    }

    public void setMesReferencia(LocalDate mesReferencia) {
        this.mesReferencia = mesReferencia;
    }

    public boolean getStatus() {
        return status;
    }

    public void setStatus(boolean status) {
        this.status = status;
    }

}

GastoDao onde apresenta erro no eclipe no get.MesReferencia():

package br.com.bruno.DAO;

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

import br.com.bruno.jdbc.ConnectionFactory;
import br.com.bruno.model.Gasto;

public class GastoDAO {

    private Connection connection;

    public GastoDAO() {
        try {
            this.connection = new ConnectionFactory().getconnection();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void adiciona(Gasto gasto) {

        String sql = "insert into gastos"
                + "(nomeGasto, valorDoGasto, dataVencimento, mesReferencia,status)"
                + "values(?,?,?,?,?)";


        try {

            //prepared statement para inserção
            PreparedStatement stmt = connection.prepareStatement(sql);

            stmt.setString(1, gasto.getNomeGasto());
            stmt.setBigDecimal(2, gasto.getValorDoGasto());
            stmt.setDate(3, Date.valueOf(gasto.getDataVencimento())); // http://respostas.guj.com.br/24591-localdate-e-jdbc
            stmt.setDate(4, Date.valueOf(gasto.getMesReferencia())); // NESTE CAMPO, GOSTARIA APENAS DE PEGAR (MES/ANO)
            stmt.setBoolean(5, gasto.getStatus());


            //executa

            stmt.execute();
            stmt.close();
        } catch(SQLException e) {
            e.printStackTrace();
        }
    }
}
2 respostas

Opa, você precisa usar o método parse do LocalDate =>

LocalDate.parse(text, formatter)

O primeiro argumento é a string representando a data e o segundo é o formato que a data está. Você precisa dar uma olhada na documentação para verificar as possibilidades de formatação.

Oi Bruno, o LocalDate possui métodos para acessar esses valores. Para pegar o mês, faça:

    LocalDate data = LocalDate.now();
    //imprime o mês
    System.out.println(data.getMonthValue());    

    //imprime o ano
    System.out.println(data.getYear());

Você pode guardar e recuperar a informação completa da data no banco. e usar esses métodos para quando quiser mostrar a informação na tela.

Espero ter ajudado e bons estudos!