Filtro de Data Jasper: Entre duas datas

Estou com muita dificuldade em gerar um relatório no Jasper através do java.
No Jasper minha consulta tudo certinho, mais quando eu realizo através do java apresenta erro.

Código da consulta no relatório:

select fornecedores.matricula_em, fornecedores.nome_em,fornecedores.endereco_em,fornecedores.telefone_em,fornecedores.telefone2_em, contas_a_pagar.n_nota, contas_a_pagar.data_emissao,contas_a_pagar.vencimento,contas_a_pagar.data_pagamento,contas_a_pagar.valor,contas_a_pagar.obs,contas_a_pagar.data from fornecedores left outer join contas_a_pagar on contas_a_pagar.matricula_em_c = fornecedores.matricula_em where data between $P{Datainicio} and $P{DataFim}

Código no java:

Quando eu executo o programa eu digito as datas mais exibe que não exite as datas.

Erro que aparece:

Para filtrar datas você depende do tipo da coluna que está no banco de dados, o que está aparecendo não é um erro, o que está acontecendo é que as datas que você está usando não retornam valores ou estão sendo informadas no formato errado.

no caso do mysql e do sqlserver o formato da data costuma ser yyyy-MM-dd ou yyyy-dd-MM vc pode usar o SimpleDateFormat para mudar como vc envia as datas para o banco de dados.

{
        SimpleDateFormat sdf1 = new SimpleDateFormat("dd/MM/yyyy");
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
        Date data_1 = sdf1.parse(vencimento.getText());
        filtro.put("Datainicio", sdf2.format(data_1));
        Date data_2 = sdf1.parse(jTextField1.getText());
        filtro.put("Datainicio", sdf2.format(data_2));
}

Certo, vou tentar. Muito obrigado.

Caso os campos no banco sejam do formato TimeStamp ou Date a forma que citei não vão funcionar, ai vc vai precisar usar o tipo Date diretamente como mostrei ou setar um TimeStamp.

{
       Date data_1 = sdf1.parse(vencimento.getText());
       filtro.put("Datainicio", data_1);
       Date data_2 = sdf1.parse(jTextField1.getText());
       filtro.put("Datainicio", data_2);
       //ou
       Date data_1 = sdf1.parse(vencimento.getText());
       filtro.put("Datainicio", new Timestamp(data_1.toInstant().toEpochMilli()));
       Date data_2 = sdf1.parse(jTextField1.getText());
       filtro.put("Datainicio", new Timestamp(data_2.toInstant().toEpochMilli()));
}

Continuou o mesmo erro com esse código.


Esse é diretamente no IReport:
Início:

Fim:

Resultado:

Funciona Perfeitamente.
Código MySQL no IReport:
select fornecedores.matricula_em, fornecedores.nome_em,fornecedores.endereco_em,fornecedores.telefone_em,fornecedores.telefone2_em, contas_a_pagar.n_nota, contas_a_pagar.data_emissao,contas_a_pagar.vencimento,contas_a_pagar.data_pagamento,contas_a_pagar.valor,contas_a_pagar.obs,contas_a_pagar.data from fornecedores left outer join contas_a_pagar on contas_a_pagar.matricula_em_c = fornecedores.matricula_em where data between $P{Datainicio} and $P{DataFim}

Conseguiu resolver este problema?

Consegui,

private  void imprimir(){
     try {
         HashMap filtro = new HashMap();
         filtro.put("datainicio",Date.valueOf(String.valueOf(dataParaMySQLInicio(Datainicio.getText()))));
         filtro.put("datafim",Date.valueOf(String.valueOf(dataParaMySQLFim(Datafim.getText()))));

         //JasperPrint print = JasperFillManager.fillReport("C:/Users/Marcelo Infortec/Documents/NetBeansProjects/OFTALTEC2b/RelatorioOS.jasper", filtro,ModuloConexao.conexao());
         JasperPrint print = JasperFillManager.fillReport("C:/Program Files (x86)/Sistema Loja/relatorio_data1.jasper", filtro,ModuloConexao.conexao());
         
           
           
           JasperViewer viewer = new JasperViewer(print,false);
           viewer.setVisible(true);
           
     } catch (Exception e) {
         JOptionPane.showMessageDialog(rootPane,"Não foi possível gerar o pdf!!" +e);
     }
 }