Boa tarde a todos, primeiramente quero dizer que estou super feliz em poder participar deste fórum onde só vemos tópicos interessantes e de muita qualidade!
Bom a duvida é a seguinte:
Estou engatinhando na programação JAVA e me surgiu algumas duvidas em uma aplicação em que estou trabalhando:
Tenho um programa com operações crud em mysql e, tenho necessidade de exportar os dados contidos no meu BD em relatórios. Ai vem as duvidas:
Trabalho com a IDE NetBeans com o plugin do iReport para criação de relatórios. Com alguns tutoriais e uma boa pesquisada na net aprendi a usar o plugin e já criei um formulário e resgata os dados do meu BD perfeitamente. Porem como faço pra chamar esse relatório da minha aplicação crud? Ex.: fiz uma busca por um cadastro de índice 10, por exemplo, gostaria que ao clicar no botão ?imprimir? ele me carregasse esse relatório ou como uma prévia primeiro ou direto na minha impressora… já tentei de tudo mais não consigo manipular o arquivo jasper criado pelo iReport.
Alguém tem algum exemplo ou algum tutoria mais pra iniciantes?
Desde já agradeço!
Vc está programando para Desktop ou Web?
Para Desk. Projeto de Area de Trabalho com Banco de Dados!
Veja o código para abrir um relatório, passando como parâmetro a query SQL:
public void geraRelatorioPedPorCod(Integer idPedido) throws JRException, Exception {
//Tenho uma classe conexão, aqui eu só chamo o seu método de abrir a conexão
banco.abrirConexao(objDados.driver, objDados.url, objDados.usuario, objDados.senha);
Statement stm = banco.conexao.createStatement();
//Faço uma consulta pelo código
String query = "SELECT \"PED_IDDOOBJETO\", \"UNI_DESCRICAO\", \"PED_DATA\", \"PED_TOTAL\", \"PES_NOME\" FROM \"PEDIDOS\", \"UNIDADES\", \"PESSOA\" WHERE \"PED_IDDOOBJETO\" = " + idPedido + " AND \"PED_IDUNIDADE\" = \"UNI_IDDOOBJETO\" AND \"PED_IDUSUARIO\" = \"PES_IDDOOBJETO\";";
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();
//Aqui passo os parâmetros se houver
parameters.put("imagem", objDados.imagemRelatorio);
/* Preenche o relatório com os dados. */
String jasperPrint = JasperFillManager.fillReportToFile("Relatórios/PedidosConsultados.jasper", parameters, jrRS);//Deve conter o diretório/nomedorelatoriocompilado
JasperViewer viewer = new JasperViewer(jasperPrint, false, false);
viewer.setExtendedState(JasperViewer.MAXIMIZED_BOTH);
viewer.setTitle("Relatório de Pedidos");
viewer.setVisible(true);
}
Este exemplo acho que tem haver com o que está querendo.
OBS: Não se esqueça que o relatório deve estar compilado, ou seja, deve ter um .jasper no diretório onde está o relatório.
Então, Basta instanciar a classe Relatório e chamar o método:
Relatorio rel = new Relatorio();
rel.geraRelatorioPedPorCod(10);
Qualquer dúvida! Estamos aí!
Vou tentar e qualquer duvida eu posto! Mais desde já valeu!
Boa noite… então amigos… eu tentei implementar esse código a minha necessidade e…
quando eu substitiu os meus devidos parametros e deixei do geito que me atende… ele pedi pra eu criar algumas classes que foi instanciada alguns objetos porem nao faço a menor ideia de como crialas… tipo o que elas propriamente fazem… segue o código:
//Id é uma variavel global que contem o Id do usuario que esta sendo consultado!
public void CarregarReport(long Id) throws SQLException {
//Criando a conexao
Conexao = CriaConexao.getConexao();
//minha query Sql responsavel por selecionar o conteudo do funcionario "x"
String Sql = "SELECT * FROM funcionario where idFuncionario like ?";
// preparando a conexao
PreparedStatement Stmt = (PreparedStatement) Conexao.prepareStatement(Sql);
//Setando o Id... variavel global dita assima
Stmt.setLong(1, Id);
//Obtendo o resultado da busca
ResultSet Rs = Stmt.executeQuery();
//Aqui comesa os problemas:
//implementação da interface JRDataSource para DataSource ResultSet
JRResultSetDataSource jrRS = new JRResultSetDataSource(rs); //------>o NetBeans pede pra criar a Classe JRResultSetDataSource! isso é algum importe que eu tenho que fazer?
//HashMap de parametros utilizados no relatório. Sempre instanciados
Map parameters = new HashMap(); //-------> Aqui a mesma coisa... é algum importe ou isso é uma classe que foi criada?
//Aqui passo os parâmetros se houver
parameters.put("imagem", objDados.imagemRelatorio); //------> Aqui mesma coisa mais entendi... se eu tivesse uma classe de nome objDados, poderia chamar imagens contidas nela certo? mais no meu caso... isso em primeiro momento nao precisa... futuramente posso ate mandar uma foto do funcionario ou coisa assim! entao posso tirar esse Map parameters né?
//Deve conter o diretório/nomedorelatoriocompilado
String jasperPrint = JasperFillManager.fillReportToFile("Relatórios/PedidosConsultados.jasper", parameters, jrRS); ---> Aqui ele pede pra cirar a classe JasperFillManager.
JasperViewer viewer = new JasperViewer(jasperPrint, false, false);------> E aqui pede pra criar a classe JasperViewer
viewer.setExtendedState(JasperViewer.MAXIMIZED_BOTH);
viewer.setTitle("Relatório de Pedidos");
viewer.setVisible(true);
}
Bom o que consigo constar é que com certeza estao faltando alguns importes pra mim nao é? bibliotecas que nem a do mysql? por que realmente criar isso tudo de classes tornaria o código muito complexo… alquem pode me dar um help?
desde ja agradeço!
Acho que não me expressei direito.
Vc tem que criar uma classe com o código que lhe passei e chamar no teu formulário.