Boa noite.
Estou tentando fazer uma consulta no banco de dados (PostgreSql) onde tenho uma tabela de compras e ela tem um campo que armazena as datas das compras. Bem Estou tentando consultar todas as compras realizadas em um intervalos entre duas datas, mas a mesma rertonar estes erros:
private void jbPesquisaHistActionPerformed(java.awt.event.ActionEvent evt) {
//botao buscar compras por periodo
try {
//receber as datas.
DateTimeFormatter formato = DateTimeFormatter.ofPattern("dd/MM/yyyy");
LocalDate data_inicio = LocalDate.parse(jftDtInicial.getText(), formato);
LocalDate data_fim = LocalDate.parse(jftDtFinal.getText(), formato);
ComprasDao dao = new ComprasDao();
List<Compras> lista = dao.listarComprasPorPeriodo(data_inicio, data_fim);
System.out.println(lista);
preencherTabela("select codigo_compra, num_nota, data_compra, nome, total_compra, obs from tb_compras "
+ "inner join tb_fornecedores on (cod_fornecedor = codigo_fornecedor) where data_compra between "+data_inicio+" and "+data_fim+" order by data_compra");
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Digite Duas Datas Com Intervalo!");
}
}
codigo do metodo em Dao:
//metodo que filtra vendas por data
public List listarComprasPorPeriodo(LocalDate data_inicio, LocalDate data_fim) {
try {
//criando a lista.
List lista = new ArrayList<>();
//comando sql para lista os dados.
String sql = "select codigo_compra, num_nota, data_compra, nome, total_compra, obs from tb_compras "
+ “inner join tb_fornecedores on (cod_fornecedor = codigo_fornecedor) where data_compra between ? and ?”;
Os campos de data estão como no banco? Dá a entender que eles são do tipo date, então não tem porque transformar o LocalDate em string, apenas passe-o diretamente, conforme a própria documentação indica:
Fiz as alterações, mais continua com o mesmo erro: estou usando o JDBC 4.2 compativel com PostgreSQL.
//metodo que filtra vendas por data
public List listarComprasPorPeriodo(LocalDate data_inicio, LocalDate data_fim) {
try {
//criando a lista.
List lista = new ArrayList<>();
//comando sql para lista os dados.
String sql = "select codigo_compra, num_nota, data_compra, nome, total_compra, obs from tb_compras "
+ “inner join tb_fornecedores on (cod_fornecedor = codigo_fornecedor) where data_compra between ? and ?”;
//metodo que filtra vendas por data na classe Dao
public List listarComprasPorPeriodo(LocalDate data_inicio, LocalDate data_fim) {
try {
//criando a lista.
List lista = new ArrayList<>();
//comando sql para lista os dados.
String sql = "select codigo_compra, num_nota, data_compra, nome, total_compra, obs from tb_compras "
+ “inner join tb_fornecedores on (cod_fornecedor = codigo_fornecedor) where data_compra between ? and ?”;
Então a lista está correta, estás a ver o toString da tua classe Compras que por default mostra o nome da classe e o hashCode do objecto em hexadecimal. Se sobreescreveres o toString() com algo que faça sentido, vais ver o seu output.
Depois, o preenchimento da tabela deve usar a tua lista e não voltar a fazer o select…