Parametros em IReport (RESOLVIDO)!

Fala pessoal, tudo bem ?

Bom, tenho duas perguntas sobre IReport:

1-) Como montar uma delcaração SQL em tempo de execução no JAVA e passar como parametros para o IReport.
Por exemplo: Se for um relatório de clientes e mando gerar o relatório básico (sem nenhum parametro) ele teria que montar por exemplo a seguinte declaração e gerar o relatório com os dados:

SELECT * FROM cliente

Porém, posso colocar para filtrar por cidade, estado, ordenar por nome, etc… ai ficaria assim por exemplo:

SELECT * FROM cliente WHERE cidade IN (“São Paulo”, “Rio de Janeiro”, “Bauru”) AND estado (“SP”, “RJ”)
ORDER BY nome

Portanto minha dúvida é como montar essas declarações SQL em tempo de execução e passar para o IReport
apenas executar e mostrar os dados na tela

2-) Como faço para que essa declaração que montar em tempo de execução seja “genérica” para executar em vários banco de dados ? Pois posso usar o mesmo relatório no banco de dados MySQL, PostGres, SQL Server, Oracle, etc.
Ai como vcs sabem a declaração SQL varia de banco para banco.

Quem puder explicar ou passar algum tutorial que fala sobre isso ajudaria muito. :wink:
Aguardo !

Passe a query como parametro para o ireport e execute-a lá.

Ve se ajuda :

http://www.furutani.eti.br/tutoriais/Mini-Tutorial_Relatorios_Java_JasperReports_e_iReport.pdf

Abraços,

Bom dia Nei.

O que você pode fazer (e que é mais comum) é passar uma coleção para o ireport.
Aqui eu faço da seguinte maneira:

  • Criei um template, com o padrão da empresa;
  • Criei uma conexão com o meu Banco de Dados(Postgres);
  • Crio um novo relatório pelo wizard, utilitando o meu wizard e uma query(SQL) com os campos que eu vou precisar, mas sem filtros (uso um limit 50 só para não listar tudo);
  • Pronto, agora é só ajeitar os campos;

Dentro da aplicação:

  • Crio um Bean com os atributos referentes aos campos do relatório;
  • Crio um método no meu DAO que retorne uma lista do Bean(como uso HQL, posso utiliza-lo com qualquer Banco)
  • Na minha tela instancio o relatório passando para ele uma coleção.

É, a linha é essa, mas só para separar os touros das vacas, vc passa os parametros pro jasperreports, não para o ireport. iReport é só uma ferramenta visual.

Map parameters = new HashMap();  
parameters.put("query", "sua query sql");

JasperPrint jasperPrint = JasperManager.fillReport(jasperReport, parameters, conn);   

Ai para que vc possa desenhar o relatorio de forma compativel com o resultado da query, crie uma variavel chamada query e como valor vc coloca a query que será passada via parametro.
Na aba Report SQL query, do iReport, vc coloca $P{query} e manda ler os campos.

Fala pessoal !

Vinnymaran, Vlw pelo tutorial, vou dar uma lida !

Leandro.anjos, vou tentar fazer dessa forma que vc passou ! Se ficar meio perdido grito aqui novamente…rsrsr Vc tem algum tutorial onde mostra bem como fazer dessa forma que vc disse ? se não tiver sem problemas tb.

Malstron, vlw pela dica. Como disse, vou tentar fazer da forma que o Leandro passou e posto aqui se conseguir ou se tiver dúvidas…

Obrigado a todos por enquanto. Valeu pela força ! :thumbup:

Fala pessoal, blz ?

Seguinte, consegui fazer o relatório funcionar sem deixar um select fixo dentro do relatório, possibilitando assim utilizar o mesmo relatório com N banco de dados.

O que fiz foi o seguinte:

  • Fui no IReports e criei um relatório em branco;
  • Fui em Opções / ClassPath;
  • Adicionei uma pasta e apontei o caminho de onte estão minhas classes.
    (Exemplo, no meu estava assim: C:\Documents and Settings\User\Meus documentos\NetBeansProjects\RelatorioWeb\build\web\WEB-INF\classes\Mb);
  • Fui em Data / Query do Relatório e selecionei a aba “Fonte de Dados JavaBean”;
  • Em Nome da classe, vc coloca a classe que deseja adicionar no relatório e clica para “Ler Atributos”;
  • Irá aparecer os atributos logo abaixo. Ai basta vc adicionar os campos e depois acrescenta-los no relatório.
  • Ai la no seu projeto vc passa o objeto para o relatório e manda ele apenas imprimir.

Vlw pessoal pela ajuda ! :thumbup: