Galera…tenho uma aplicação q precisa gerar um relatorio…eh o seguinte…o relatorio vai ser sobre uma tarefa(que o usuario escolher) e suas subtarefas…soh q eu preciso passar para o jasper qual irá ser o id da tarefa…alguem sabe como eu passo uma sql pra ele? do java para o jasper…e nao dentro do proprio jasper…
desde já agradeço!
[Resolvido]Passar parametros para o JasperReport
11 Respostas
Olá, o código para o que vc quer é o seguinte:
public void geraRelatorioPedDetalhado(String idPedido, String unidRequisitane, String dataPedido) throws JRException, Exception {
banco.abrirConexao(objDados.driver, objDados.url, objDados.usuario, objDados.senha);//Aqui vc deve fazer conexão da forma que vc quiser
Statement stm = banco.conexao.createStatement();
String query = "SELECT \"ITEPED_IDPRODUTO\", \"PRO_DESCRICAO\", \"ITEPED_QUANTIDADE\", \"UNIMED_SIGLA\" FROM \"ITENSPEDIDO\", \"PRODUTO\", \"UNIDADEMEDIDA\" WHERE \"ITEPED_IDPEDIDO\" = " + idPedido + " AND \"ITEPED_IDPRODUTO\" = \"PRO_IDDOOBJETO\" AND \"PRO_IDUNIDADEMEDIDA\" = \"UNIMED_IDDOOBJETO\";";//Código SQL que ira retornar a consulta e que vc vai passar para o relatório
ResultSet rs = stm.executeQuery(query);
/* implementação da interface JRDataSource para DataSource ResultSet */
JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);
/* HashMap de parametros utilizados no relatório. Sempre instanciados */
Map parameters = new HashMap();
//Passa as datas como parâmetro para aparecer no relatório
parameters.put("idPedido", idPedido);//Aqui vc passa os parâmetros para um hashmap, que será enviado para o relatório
parameters.put("unidRequisitante", unidRequisitane);
parameters.put("dataPedido", dataPedido);
/* Preenche o relatório com os dados. */
String jasperPrint = JasperFillManager.fillReportToFile("Relatórios/PedidoDetalhado.jasper", parameters, jrRS);//Aqui vc chama o relatório
JasperViewer viewer = new JasperViewer(jasperPrint, false, false);
viewer.setExtendedState(JasperViewer.MAXIMIZED_BOTH);//Coloca em maximizado
viewer.setTitle("Pedido Detalhado");//Coloca um título no relatório
viewer.setVisible(true);
}
Seguinte, vc tem q criar parametros com o mesmo nome e tipo destes q estão no código e vc precisa ter um .jasper no diretório q vc informar, ou seja, um relatório compilado.
Espero ter ajudado!
T+ 8)
vlww
mas ele deu um erro rsrs
esse > Exception in thread “AWT-EventQueue-0” java.lang.NoClassDefFoundError: Lorg/apache/commons/logging/Log;
eh na hora q eu seto o local do arquivo do jasper…eu jah conferi e esta certo o local…
o q devo fazer???
flw
?
commons-logging
agora deu esse erro:
java.lang.NoClassDefFoundError: org/apache/commons/digester/Rule
…
amigo coloque os jars necessarios do iReport…
commons-digester
jah puis esse dois commons agora ele deu o seguinte erro:
org.codehaus.groovy.control.CompilationFailedException
:S
ta complicado rs
no relatorio mude de groovy para java.
mas sem querer abusar … vc da uma pesquisada antes de postar? =x
esses erros saem na primeira pagina do google 
não é por nada… mas nao custa dar uma pesquisadinha ^^
aew…agora ele apareceu…mas ele nao ta pegando o meu parametro…segue o codigo:
String sql = "";
try{
Statement stm = BD.connection.createStatement();
sql = "SELECT * FROM pendencia WHERE id_tarefa = \"IDTAREFA\"";//Código SQL que ira retornar a consulta e que vc vai passar para o relatório
ResultSet rs = stm.executeQuery(sql);
/* implementação da interface JRDataSource para DataSource ResultSet */
JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);
/* HashMap de parametros utilizados no relatório. Sempre instanciados */
Map parameters = new HashMap();
//Passa as datas como parâmetro para aparecer no relatório
parameters.put("IDTAREFA", idTarefa);//Aqui vc passa os parâmetros para um hashmap, que será enviado para o relatório
/* Preenche o relatório com os dados. */
String jasperPrint = JasperFillManager.fillReportToFile("C:/Documents and Settings/Administrador/Meus documentos/Reports.jasper", parameters, jrRS);//Aqui vc chama o relatório
JasperViewer viewer = new JasperViewer(jasperPrint, false, false);
viewer.setExtendedState(JasperViewer.MAXIMIZED_BOTH);//Coloca em maximizado
viewer.setTitle("Pedido Detalhado");//Coloca um título no relatório
viewer.setVisible(true);
}
catch(Exception erro){
erro.printStackTrace();
}
o que ha de errado?
vc criou no seu relatorio um $Parameter
chamado:
$P{IDTAREFA}
??
Da forma que esta fazendo esta errado. uma informação de SQL nao é informação de parameter… parameters.put é parametro para o relatorio.
desde que ele exista no relatorio
sim...mas ja consegui resolver...segue abaixo o codigo:
String sql = "";
try{
Statement stm = BD.connection.createStatement();
sql = "SELECT * FROM pendencia WHERE id_tarefa = "+idTarefa+"";//Código SQL que ira retornar a consulta e que vc vai passar para o relatório
ResultSet rs = stm.executeQuery(sql);
/* implementação da interface JRDataSource para DataSource ResultSet */
JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);
/* Preenche o relatório com os dados. */
String jasperPrint = JasperFillManager.fillReportToFile("C:/Documents and Settings/Administrador/Meus documentos/Reports.jasper", null, jrRS);//Aqui vc chama o relatório
JasperViewer viewer = new JasperViewer(jasperPrint, false, false);
viewer.setExtendedState(JasperViewer.MAXIMIZED_BOTH);//Coloca em maximizado
viewer.setTitle("Histórico - Tarefa nº " + idTarefa);//Coloca um título no relatório
viewer.setVisible(true);
}
catch(Exception erro){
erro.printStackTrace();
}
Muito obrigado pela ajuda!