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. 
Aguardo !
Passe a query como parametro para o ireport e execute-a lá.
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: