[RESOLVIDO]ireport + passar parametros no where da consulta sql

Olá pessoal,

Estou com um grande problema,

Pra fazer a consulta no banco de dados, eu tenho q fazer um select no relatorio, porem o meu where está assim

exemplo

"select * from teste where=?"

como setar esse ? que muda de acordo com de onde o relatorio eh chamado…???

espero que possam me ajudar!!!

Bom, no meu caso eu coloquei um JOptionPane pra pessoa digitar o id pro relatório.

public relatClientes() {
try
{
con.conecta();
int var =Integer.parseInt(JOptionPane.showInputDialog(null, “Digite o código para executar o Relatório: “));
con.executeSQL(“SELECT * from cliente where codigo=” + var);
JRResultSetDataSource jrRS = new JRResultSetDataSource(con.resultset);
JasperPrint jasperPrint = JasperFillManager.fillReport(
”/estoque full/estoque/estoque/relatorio/relClientes.jasper”, new HashMap(), jrRS);
JasperViewer.viewReport(jasperPrint, false);

aqui é web… e nao pode ter nenhum alert sequer,
mas vc colocou uma outra duvida minha em pauta…

ali vc passou uma list pro relatorio…
eu ja tentei aqui, mas la no relatorio nao sei como pegar o valor dessa list

Essa parte você define depois que criou uma cláusula SQL no IReport. Você deve ir até a opção de consultas do relatório (como estou no trabalho e minha máquina não tem o iReport não tenho certeza desta opção) e incluir um parâmetro do tipo de dado que quiser (int, String, Float, etc). Após isto, altere a cláusula, colocando o parâmetro criado no where.

A API do iReport dá suporte para que você passe parâmetros, através de um HashMap, por exemplo.
Para tanto, será preciso criar variáveis no relatório, no momento em que o mesmo é programado. Há até uma maneira de rodar passando estes parâmetros.

Mais tarde, em casa, envio uns exemplos, para tornar mais didático e compreensível o que disse.

drsmachado , eu agradeço muito

justo pela dificuldade, no caso aqui do meu projeto, tudo que está no relatorio é passado pelo map, mas nao uma lista… se eu tenho meu bean Usuario… passo uma lista usuarios pra ele como eu faço usuario.getNome() por exemplo… ?

entende minha duvida?

faça assim:

con = Conexao.getConnectionMysql(); comando = con.prepareStatement(" aqui vc coloca seu sql como quiser ")
rs = comando.executeQuery();
JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);
HashMap parameters = new HashMap();
parameters.put(“PAR_CLIENTE”, “EMPRESA TESTE LTDA”);
String pathModelReport = this.getServletContext().getRealPath(
"/WEB-INF/classes/mmc/reports/rel1.jasper");

Vou usar a idéia do marciofermino e complementar com o que eu compreendi como solução para tua duvida. O HashMap pode receber objetos do tipo Object, assim sendo, é possível colocar qualquer tipo de dado nele, certo?
Portanto, considerando que você queira passar os parâmetros pêra, uva, maçã e tomate, basta que, dentro do report criado, você possua respectivas variáveis que recebam estes valores.
Basicamente, seria:

HashMap hm = new HashMap();
hm.put("pera", BeanPera.getNome());
hm.put("uva", BeanUva.getNome());
hm.put("maca", BeanMaca.getNome());
hm.put("tomate", BeanTomate.getCod());

Dando continuidade…
Não sei que versão do iReport você está utilizando, mas na versão 3.0 o processo é assim:
1 - Cria-se o modelo do relatório com uma query que considere a cláusula where e todas as variáveis são instanciadas como padrão (codigo = 1, nome = ‘’, etc);
2 - Com o modelo pronto, vou até o menu visualizar e acesso Parâmetros do relatório;
3 - Clico em novo, informo o nome do parâmetro (o mesmo que será passado no HashMap) e em valor padrão da expressão, insiro $P{nome_do_parametro} ;
4 - Posso clicar em “usar como sugestão” e, quando executar o relatório usando a conexão ativa, o próprio iReport se encarrega de solicitar o valor para o parâmetro;
5 - Após clicar em “Ok” fecho a outra caixa e vou até o menu Data e acesso query do relatório;
6 - No lugar dos parâmetros padrão da cláusula where, insiro os parâmetros criados, sempre na forma select * from vegan_food where cod = $P{tomate} ;

marciofermino , obrigada…
mas eu nao estou com problemas nisso, eu sei fazer uma query, sei passar valores do map… meu problema era usar esse parametro no where dentro do relatorio, nao na aplicação, mas obrigada mesmo assim

drsmachado ,

acho que é esse o caminho mesmo, vou tentar fazer isso agora aqui no projeto e te dou um feedback se funcionou…
obrigada

:wink:

Meu anjo… rsss

eu adoro esse personagem

Vc nao prestou atencao.

Seguinte… no iReport vc vai colocar uma query simples

SELECT * FROM FUNCIONARIOS

isso mesmo…

ai quando for chamar o relatorio… vc olha que eu crio o SQL como quiser…
e passo resulset para o relatorio… entao o meu SELECT * FROM funcionarios. ja era…

Estou explicando assim para vc entender… tecnicamente nao é isso oque acontece…

Se precisar, me da um alô que te ajudo.

marciofermino, qual? a funerea?

e gente, ainda nao consegui de maneira nenhuma

oha meu where como está

            where ei.index_id = $P{indexId} //no banco isso eh um number
            and eiad.price_date = $P{priceDate} //esse eh date
            and eias.ticker = $P{tickerName} //esse eh varchar
            and eias.action_id = $P{actionId} // esse number
            and ei.index_id=eias.index_id

eu setei os parametros pra string, number/int e date…
mas ele da um erro do sql…

=/

“invalid indentifier”

drsmachado ,

PRECISO MTO!!!

:smiley:

Pode passar todos como String, a instrução SQL será lida normalmente.
Posta a mensagem toda do erro

E ai, conseguiste?

Funeria meu anjo…

con = Conexao.getConnectionMysql(); comando = con.prepareStatement(" aqui vc coloca seu sql como quiser ") con = Conexao.getConnectionMysql(); comando = con.prepareStatement(" aqui vc coloca seu sql como quiser ") rs = comando.executeQuery(); JRResultSetDataSource jrRS = new JRResultSetDataSource(rs); HashMap parameters = new HashMap(); parameters.put("PAR_CLIENTE", "EMPRESA TESTE LTDA"); String pathModelReport = this.getServletContext().getRealPath( "/WEB-INF/classes/mmc/reports/rel1.jasper");

Olhai meu amor… eu montro o SQL e passo O RESULT para o relatorio… e pronto…
so isso
nao tem mais nada para fazer;

Outra tem emprego ai… to sainda aqui da empresa!
RSS

olá pessoal… DEU CERTO!

aehaiuehaiuhei

e das duas maneiras!!!

obrigada mesmo gente… !!!

Amigos boa noite,
Sou novo com Ireport, estou tentando passar parametros para iReport, já tentei de tudo, diversas formas, e até agora não consigo ver uma luz no fundo do túnel, por favor me ajudem, segue meu código:

Versão netbeans: 7.3
Versão Ireport: 5.2.0
Versão MySQL: 5.6.12


import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.view.JasperViewer;

//import net.sf.jasperreports.engine.JRException;  
//import net.sf.jasperreports.engine.JasperFillManager;
//import net.sf.jasperreports.engine.JasperPrint;
//import net.sf.jasperreports.engine.JasperReport;
//import net.sf.jasperreports.engine.util.JRLoader;
//import net.sf.jasperreports.engine.JRException;
//import net.sf.jasperreports.engine.JasperReport;
//import net.sf.jasperreports.engine.JasperReportsContext;
//import net.sf.jasperreports.web.JRInteractiveException;
//import net.sf.jasperreports.web.WebReportContext;
//import net.sf.jasperreports.web.actions.Action;
import wr.acessoBD.AcessoMySql;

 private void imprimirRecibo() throws SQLException {
       
        
        try {
            Connection con;
             
            con = AcessoMySql.conectar();
            //InputStream relatorio = getClass().getResourceAsStream( "./relatorio_comanda.jasper" );  
            InputStream relatorio = getClass().getResourceAsStream( "/wrestaurante/view/relatorio_comanda.jasper" );  
                      
            Map parametros = new HashMap();
            parametros.put("nmesa", getMesa());

            System.out.println("relatorio = " + relatorio);
            //Resultado do print relatorio = java.io.BufferedInputStream@41424b9c
 
            System.out.println("parametro = " + parametros);
            //Resultado do print parametro = {nmesa=4}

            System.out.println("con = " + con);
            //Resultado do print con = com.mysql.jdbc.JDBC4Connection@6772103c
            
Linha 1461:   JasperPrint print = JasperFillManager.fillReport(relatorio, parametros, con); //Onde ocorre o erro
           
            JasperViewer.viewReport(print);
            
        } catch (JRException ex) {
            Logger.getLogger(PedidosView.class.getName()).log(Level.SEVERE, null, ex);
        }
    
    }

Quando utilizo o preview do iReport ele pede o parâmetro, e funciona perfeito, mas quando vou para o netBeans e tento comunicar com o iReport gera o erro na linha 1461, como o trace abaixo:

relatorio = java.io.BufferedInputStream@71880832
parametro = {nmesa=4}
con = com.mysql.jdbc.JDBC4Connection@19d244d9
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
	at net.sf.jasperreports.engine.util.JRLoader.<clinit>(JRLoader.java:68)
	at net.sf.jasperreports.engine.JRPropertiesUtil.loadProperties(JRPropertiesUtil.java:99)
	at net.sf.jasperreports.engine.DefaultJasperReportsContext.initProperties(DefaultJasperReportsContext.java:94)
	at net.sf.jasperreports.engine.DefaultJasperReportsContext.<init>(DefaultJasperReportsContext.java:71)
	at net.sf.jasperreports.engine.DefaultJasperReportsContext.<clinit>(DefaultJasperReportsContext.java:59)
	at net.sf.jasperreports.engine.JasperFillManager.getDefaultInstance(JasperFillManager.java:85)
	at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:824)
	at wrestaurante.view.PedidosView.imprimirRecibo(PedidosView.java:1461)
	at wrestaurante.view.PedidosView.jButton2ActionPerformed(PedidosView.java:908)
	at wrestaurante.view.PedidosView.access$1900(PedidosView.java:91)
	at wrestaurante.view.PedidosView$18.actionPerformed(PedidosView.java:520)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
	at java.awt.Component.processMouseEvent(Component.java:6505)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
	at java.awt.Component.processEvent(Component.java:6270)
	at java.awt.Container.processEvent(Container.java:2229)
	at java.awt.Component.dispatchEventImpl(Component.java:4861)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
	at java.awt.Container.dispatchEventImpl(Container.java:2273)
	at java.awt.Window.dispatchEventImpl(Window.java:2719)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
	at java.awt.EventQueue.access$200(EventQueue.java:103)
	at java.awt.EventQueue$3.run(EventQueue.java:694)
	at java.awt.EventQueue$3.run(EventQueue.java:692)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
	at java.awt.EventQueue$4.run(EventQueue.java:708)
	at java.awt.EventQueue$4.run(EventQueue.java:706)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)

	at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:154)
	at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:182)
	at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:221)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:219)
	at java.awt.Dialog.show(Dialog.java:1082)
	at java.awt.Component.show(Component.java:1651)
	at java.awt.Component.setVisible(Component.java:1603)
	at java.awt.Window.setVisible(Window.java:1014)
	at java.awt.Dialog.setVisible(Dialog.java:1005)
	at wrestaurante.view.Inicio.exibirPedido(Inicio.java:3238)
	at wrestaurante.view.Inicio.bt4ActionPerformed(Inicio.java:2774)
	at wrestaurante.view.Inicio.access$2000(Inicio.java:19)
	at wrestaurante.view.Inicio$21.actionPerformed(Inicio.java:1614)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
	at java.awt.Component.processMouseEvent(Component.java:6505)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
	at java.awt.Component.processEvent(Component.java:6270)
	at java.awt.Container.processEvent(Container.java:2229)
	at java.awt.Component.dispatchEventImpl(Component.java:4861)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
	at java.awt.Container.dispatchEventImpl(Container.java:2273)
	at java.awt.Window.dispatchEventImpl(Window.java:2719)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
	at java.awt.EventQueue.access$200(EventQueue.java:103)
	at java.awt.EventQueue$3.run(EventQueue.java:694)
	at java.awt.EventQueue$3.run(EventQueue.java:692)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
	at java.awt.EventQueue$4.run(EventQueue.java:708)
	at java.awt.EventQueue$4.run(EventQueue.java:706)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
	at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 93 more

Amigo me parece que seu erro não esta com o java e sim com o ireport, de uma pesquisadinha sobre parametros mas do lado do ireport,

dei uma olhada de apenas 1 segundo, então pode ser que alguém vem aqui e já acho o erro de cara. mas olhei bem por cima…

Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
Está faltando adicionar o jar commons-logging…

Amigos, obrigado, agora funcionou!

Utilizei as jars:

commons-logging-1.1.1.jar
commons-beanutils-1.8.0.jar
commons-digester-2.1.jar
iText-2.1.7.js2.jar
commons-collections-2.1.1.jar
jasperreports-5.2.0.jar

Obrigado