gerando relatórios com ireport e java

Upload: gerson-mayer

Post on 18-Oct-2015

17 views

Category:

Documents


0 download

TRANSCRIPT

Gerando relatrios com iReport e Java

Este tpico vem com finalidade informar, passo a passo, como criar um relatrio com o iReport e execut-lo atravs de uma aplicao em Java. Para melhor entendimento, no trabalharemos com o projeto em uma estrutura de camadas, todos os arquivos ficaro na pasta raiz do projeto. Ferramentas utilizadas: iReport-1.2.5 Java (verso jre1.5.0_06) Eclipse (Lomboz) MySQL 5.0.18Vamos considerar que voc j criou um esquema no mysql com o nome meuprojetoExecute este script para criar a tabela e inserir alguns registros: /*MySQL BackupSource Host: localhostSource Server Version: 5.0.18-ntSource Database: meuprojetoDate: 2006/11/29 21:27:23*/

SET FOREIGN_KEY_CHECKS=0;use meuprojeto;#----------------------------# Table structure for tb_produtos#----------------------------CREATE TABLE `tb_produtos` ( `cod` int(11) NOT NULL auto_increment, `descricao` varchar(50) character set latin1 collate latin1_general_ci default NULL, `preco` double default NULL, PRIMARY KEY (`cod`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;#----------------------------# Records for table tb_produtos#----------------------------

insert into tb_produtos values (1, 'camisa', '20'), (2, 'cala', '30'), (3, 'perfume', '70'), (4, 'cinto', '20'), (5, 'sapato', '100'), (6, 'cueca', '10'), (7, 'teste', '10');

J temos o esquema criado, a tabela e alguns registros, vamos abrir o iReport para criarmos o relatrio:Abra o iReport e, caso ainda no tenha uma conexo ativa, siga os passos abaixo: No menu, clique em Data e depois em Connectios/Datasources, voce ter uma tela como esta:

Clique em new e configure conforme a figura abaixo:

Se o usurio root necessitar de senha, informe-a em PassWord Clique em Test para verificar a conexo e depois em Save. Voc retornar pala a janela anterior, selecione a conexo e clique em Set as Default. Feche a janelaVamos criar o relatrio da maneira mais rpida e prtica Clique em Arquivo | Assistente de Relatrio Na janela informe a consulta para o relatrio, conforme figura:

Clique em Next, na prxima janela, coloque todos os itens para a janela da direita, conforme figura e clique em Next

No vamos ordenar por grupo, clique em Next novamente Na proxima janela, selecione Tabular Layout e classicT.xml, conforme figura:

Clique em Next e em Encerrar

Voc ter algo assim:

Localize estes botes:

O primeiro compila o relatrio, o segundo exibe a estrutura (sem dados) e o terceiro exibe o relatrio com os dados.Se voc ainda no salvou o relatrio, qualquer um que voce clique, ele vai pedir para que salve, faa isto e d o nome relatrio.Faa alguns testes com os botes, caso o relatrio no seja exibido, verifique os passos anteriores pois neste ponto voc j dever ver o relatrio pronto.Se ocorreu tudo bem, vamos alterar o ttulo, d um clique duplo em cima dele e altere para Relao de Produtos, veja:

e ficar assim.

Salve o relatrio novamente e feche o iReport.Lembra-se que o relatrio foi salvo com a extenso .jrxml ??Bem, este arquivo normalmente utilizado para edio do relatrio mas, o que vamos utilizar ser o que o iReport gerou com a extenso .jasper.Verifique que ele j se encontra na pasta onde est instalado o iReport, mais adiante, quando estivermos criando a Aplicao em Java, eles devero ser copiados para a pasta raiz do projeto. Na ocasio oportuna lembrarei a vocNeste ponto j estamos com o relatrio pronto, vamos criar a Aplicao.A partir deste ponto, no sero necessrias as exibies de imagens, apenas informarei que arquivos devero ser criados (passando seu contedo), onde sero salvos e demais arquivos que devero ser copiados, ok?Abra o eclipse, crie um novo projeto java com o nome ProjRelatorio.Com o projeto selecionado, clique com o boto direito e em New e Folder, d o nome de lib Antes de tudo, vamos trazer os arquivos do pacote iReport para o projeto.Acesse a pasta lib do diretrio do iReport e copie os seguintes arquivos para a pasta lib do seu projeto.Confira pela imagem:

Observe que o ltimo arquivo mysql-connector-java-3.1.12-bin.jar pode ter uma verso diferente do que voce encontrar na pasta lib, no tem problema.Arquivos copiados? Vamos informar ao projeto que eles existem. Com o projeto selecionado clique em Project | Properties Na janela que se abre clique em Java Build Path Selecione janela Libraries e clique em Add JARs Expanda sem projeto, clique na pasta lib, selecione todos os arquivos, clique em OK e novamewnte em OK.Agora vamos criar os seguintes arquivos, conforme figura:

A funo de cada um: ExcRepositorio.javaEsta classe verifica erros quando do acesso base de dados, analisando abertura/fechamento gConexao.javaResponsvel pela conexo com a base de dados principal.javaAplicao principal onde ser inserido um registro e apresentado o relatrio produto.javaClasse utilizada para inserir produtos na base de dados repositorioProduto.javaResponsvel pela insero do produto e tambm pela gerao do relatrio.

Eis o contedo dos arquivos: Salvar como: ExcRepositorio.java1. public class ExcRepositorio extends Exception {1. public ExcRepositorio(String mensagem) {1. super(mensagem);1. }1. }Salvar como: gConexao.java

1. import java.sql.Connection;1. import java.sql.DriverManager;1. import java.sql.SQLException;1. 1. public class gConexao {1. private static Connection con;1. public static Connection getConexao() throws ExcRepositorio {1. String driver = "com.mysql.jdbc.Driver";1. String url = "jdbc:mysql://localhost:3306/meuprojeto";1. String login = "root";1. String senha = "";1. try {1. Class.forName(driver);1. con = DriverManager.getConnection(url, login, senha);1. } catch (ClassNotFoundException e) {1. throw new ExcRepositorio("Driver no encontrado: " + e.getMessage());1. } catch (SQLException e) {1. throw new ExcRepositorio("Erro abrindo conexo: " + e.getMessage());1. }1. return con;1. }1. }Salvar como: principal.java

1. import javax.swing.JOptionPane;1. import net.sf.jasperreports.engine.JRException;1. import net.sf.jasperreports.engine.JasperPrint;1. import net.sf.jasperreports.view.JasperViewer;1. 1. public class principal {1. public static void main(String[] args) throws JRException {1. repositorioProduto rep = new repositorioProduto();1. JasperPrint relat;1. 1. //Insere mais um produto e exibe o relatrio1. String desc = JOptionPane.showInputDialog("Descrio do produto: ");1. double valor = Double.parseDouble(JOptionPane.showInputDialog("Valor: "));1. produto prod = new produto(desc,valor);1. 1. try {1. rep.inserir(prod);1. relat = rep.gerar();1. JasperViewer.viewReport(relat, false);1. } catch (ExcRepositorio e) {1. JOptionPane.showMessageDialog(null, "Erro: " + e.getMessage());1. }1. }1. }Salvar como: produto.java

1. public class produto {1. private int cod;1. private String descricao;1. private double preco;1. 1. public produto(String desc, double preco){1. this.setDescricao(desc);1. this.setPreco(preco);1. }1. public int getcod() {return cod;}1. public String getDescricao() {return descricao;}1. public double getPreco() {return preco;}1. 1. public void setcod(int cod) {1. this.cod = cod;1. }1. public void setDescricao(String desc){1. this.descricao = desc;1. }1. public void setPreco(double pc){1. this.preco = pc;1. }1. }Salvar como: repositorioProduto.java

1. import java.sql.Connection;1. import java.sql.SQLException;1. import java.sql.Statement;1. import java.util.HashMap;1. 1. import javax.swing.JOptionPane;1. 1. import net.sf.jasperreports.engine.JRException;1. import net.sf.jasperreports.engine.JasperFillManager;1. import net.sf.jasperreports.engine.JasperPrint;1. 1. public class repositorioProduto{1. 1. public repositorioProduto() {}1. 1. public void inserir(produto prod) throws ExcRepositorio{1. String desc = prod.getDescricao();1. double preco = prod.getPreco();1. String SQL = "insert into tb_Produtos (descricao, preco) values " +1. "('" + desc + "', " + preco + ")";1. 1. Connection conn = null;1. Statement stat = null;1. try {1. conn = gConexao.getConexao();1. stat = conn.createStatement();1. stat.executeUpdate(SQL);1. } catch (SQLException e) {1. throw new ExcRepositorio("Erro na conexo ao inserir: " + e.getMessage());1. } finally {1. if (stat != null) {1. try {1. stat.close();1. } catch (SQLException e) {1. throw new ExcRepositorio("Erro ao fechar conexo: " + e.getMessage());1. }1. }1. }1. }1. public JasperPrint gerar() throws ExcRepositorio{1. JasperPrint rel = null;1. try {1. Connection con = gConexao.getConexao();1. HashMap map = new HashMap();1. String arquivoJasper = "relatorio.jasper";1. rel = JasperFillManager.fillReport(arquivoJasper, map, con);1. } catch (JRException e) {1. JOptionPane.showMessageDialog(null,e.getMessage());1. }1. return rel;1. }1. }

Vamos agora copiar os arquivos relatorio.jrxml e relatorio.jasper da pasta do iReport para a pasta raiz do seu projeto (S precisamos do .jasper, mas deixe uma cpia do jxml como segurana.).Seu projeto deve est assim:Agora s executar, ser solicitado dados para insero de um produto, faa isto e j o veja includo no relatrio que ser exibido.