Paranetro query

3 respostas
G

Tenho um formulario de relatorios com 5 Jcheckbutton, tenho tambem o entitymanager, query, list, cada check imprimira um relatorio com a seguinte instrução

try{

String Query = SELECT c FROM Bancos c;

query1 = entityManager1.createQuery(Query);

list1.clear();

list1.addAll(query1.getResultList());

String path = new File(".").getCanonicalPath() + “\relatorios\repBancos.jrxml;

JasperReport report = JasperCompileManager.compileReport(path);

JRBeanCollectionDataSource dados = new JRBeanCollectionDataSource(list1);

JasperPrint print = JasperFillManager.fillReport(report, null, dados);

JasperViewer.viewReport(print, false);
} catch (JRException ex) {
        Logger.getLogger(JFrmCursos.class.getName()).log(Level.SEVERE, null, ex);
    }catch (IOException ex){
        System.out.println(ex.getMessage());
    }

Se deixo a query em branco nas propriedades da esse erro

net.sf.jasperreports.engine.JRException: Errors were encountered when compiling report expressions class file:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
calculator_null_1523070452433_762238: 166: expecting ‘)’, found ‘de’ @ line 166, column 31.

Como faço para cada opção passar o select de cada relatorio

3 Respostas

Villagram

Amigo, pelo que estou vendo o seu formulário puxa tudo de uma vez só sem definir nenhum parametro, basta definir a cláusula WHERE na query e um controle de null pointer no código para informar o usuário que não houve resultados.

for (Enumeration e = buttonGroup1.getElements(); e.hasMoreElements()<img src="//https://cdn.jsdelivr.net/gh/twitter/twemoji@14/assets/72x72/w.pngink.png?v=5" title=":wink:" class="emoji" alt=":wink:"> {

JRadioButton b = (JRadioButton) e.nextElement();

if (b.getModel() == buttonGroup1.getSelection()) {

String Query = “SELECT c FROM Bancos c WHERE c.Opcao = ?”;

query1 = entityManager1.createQuery(Query);

query1.setParameter(1, b.getText());

List lista = query1.getResultList();

if(lista.size() > 0){

String path = new File(".").getCanonicalPath() + “\relatorios\repBancos.jrxml”;

JasperReport report = JasperCompileManager.compileReport(path);

JRBeanCollectionDataSource dados = new JRBeanCollectionDataSource(list1);

JasperPrint print = JasperFillManager.fillReport(report, null, dados);

JasperViewer.viewReport(print, false);

} else {

JOptionPane.showMessageDialog(null, “Há consulta não retornou resultados”, “Consulta inválida”);

}
}

}

G

Bom dia este procedimento serve apenas para chamar o relatório como não chama direto no formulário achei este meio definindo a query em cada botão. Não tenho parâmetro nenhum o select é para chamar todo o conteúdo da tabela não é uma consulta.

Posso fazer o botão chamar o relatório já compilado .jasper como fazer??? poderias me ajudar, peguei algumas aulas e to criando sistema simples de controle de cursos

Villagram

Eu coloco o query diretamente no relatório com SQL puro e faço o mapeamento dos parâmetros quando necessário:

public class RelatorioManager{

public RelatorioManager(){

}

public static void imprimirRelatorio(Connection conn, String titulo, Map parametros, InputStream inputStream) {

try {

JasperPrint jpPrint = JasperFillManager.fillReport(inputStream, parametros, conn);

viewReportFrame(titulo, jpPrint);

} catch (Exception exceptionReport) {

JOptionPane.showMessageDialog(null, Não foi possível gerar o relatório selecionado!, Erro ao gerar relatório, JOptionPane.ERROR_MESSAGE);

exceptionReport.printStackTrace();

JOptionPane.showMessageDialog(null, exceptionReport.getMessage(), Erro ao gerar relatório, JOptionPane.ERROR_MESSAGE);

}

}
private static void viewReportFrame(String titulo, JasperPrint print) {

JRViewer viewer = new JRViewer(print);

JFrame frameReport = new JFrame(titulo);

frameReport.add(viewer, BorderLayout.CENTER);

frameReport.setSize(500, 500);

frameReport.setExtendedState(JFrame.MAXIMIZED_BOTH);

frameReport.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

frameReport.setVisible(true);

}

}

depois você só precisa fazer a chamada do método no botão do formulário:

public void imprimir() {

InputStream inputStreaImputStream = getClass().getResourceAsStream("/reports/relatorio.jasper");

Map parametros = new HashMap();

parametros.put(ID, Long.parseLong(form.getCliente().getTxtId().getText()));

RelatorioManager.imprimirRelatorio(dao.getConnection(), Relatório Geral , parametros, inputStreaImputStream);

}

Caso não queria passar parâmetros basta passar o map como null

Criado 7 de abril de 2018
Ultima resposta 7 de abr. de 2018
Respostas 3
Participantes 2