Olá pessoal,
Este tópico vem com finalidade informar, passo a passo, como criar um relatório com o iReport e executá-lo através de uma aplicação em Java.
Para melhor entendimento, não trabalharemos com o projeto em uma estrutura de camadas, todos os arquivos ficarão na pasta raiz do projeto.
- Ferramentas utilizadas:
- iReport-1.2.5
- Java (versão jre1.5.0_06)
- Eclipse (Lomboz)
- MySQL 5.0.18
Vamos considerar que você já criou um esquema no mysql com o nome meuprojeto
Execute este script para criar a tabela e inserir alguns registros:
/* MySQL Backup Source Host: localhost Source Server Version: 5.0.18-nt Source Database: meuprojeto Date: 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, 'calça', '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 relatório:
Abra o iReport e, caso ainda não tenha uma conexão 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 usuário root necessitar de senha, informe-a em PassWord
- Clique em Test para verificar a conexão e depois em Save.
- Voce retornará pala a janela anterior, selecione a conexão e clique em Set as Default.
- Feche a janela
Vamos criar o relatório da maneira mais rápida e prática
- Clique em Arquivo | Assistente de Relatório
- Na janela informe a consulta para o relatório, conforme figura:
- Clique em Next, na proxima janela, coloque todos os itens para a janela da direita, conforme figura e clique em Next
- Não 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
Voce terá algo assim:
Localize estes botões:
O primeiro compila o relatório, o segundo exibe a estrutura (sem dados) e o terceiro exibe o relatório com os dados.
Se voce ainda não salvou o relatório, qualquer um que voce clique, ele vai pedir para que salve, faça isto e dê o nome relatorio.
Faça alguns testes com os botôes, caso o relatório não seja exibido, verifique os passos anteriores pois neste ponto você já deverá ver o relatório pronto.
Se ocorreu tudo bem, vamos alterar o título, dê um clique duplo em cima dele e altere para Relação de Produtos, veja:
e ficará assim.
Salve o relatório novamente e feche o iReport.
Lembra-se que o relatório foi salvo com a extensão .jrxml ??
Bem, este arquivo é normalmente utilizado para edição do relatório mas, o que vamos utilizar será o que o iReport gerou com a extençsão .jasper.
Verifique que ele já se encontra na pasta onde está instalado o iReport, mais adiante, quando estivermos criando a Aplicação em Java, eles deverão ser copiados para a pasta raiz do projeto. Na ocasião oportuna lembrarei a você…
Neste ponto já estamos com o relatório pronto, vamos criar a Aplicação.
A partir deste ponto, não serão necessárias as exibições de imagens, apenas informarei que arquivos deverão ser criados (passando seu conteúdo), onde serão salvos e demais arquivos que deverão ser copiados, ok?
Abra o eclipse, crie um novo projeto java com o nome ProjRelatorio.
Com o projeto selecionado, clique com o botão 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 diretório 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 versão diferente do que voce encontrará na pasta lib, não 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 função de cada um:
- ExcRepositorio.java
Esta classe verifica erros quando do acesso à base de dados, analizando abertuta/fechamento - gConexao.java
Responsável pela conexao com a base de dados - principal.java
Aplicação principal onde será inserido um registro e apresentado o relatório - produto.java
Classe utilizada para inserir produtos na base de dados - repositorioProduto.java
Responsável pela inserção do produto e tambem pela geração do relatório.
Eis o conteúdo dos arquivos:
Salvar como: ExcRepositorio.java
public class ExcRepositorio extends Exception { public ExcRepositorio(String mensagem) { super(mensagem); } }
Salvar como: gConexao.java
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class gConexao { private static Connection con; public static Connection getConexao() throws ExcRepositorio { String driver = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql://localhost:3306/meuprojeto"; String login = "root"; String senha = ""; try { Class.forName(driver); con = DriverManager.getConnection(url, login, senha); } catch (ClassNotFoundException e) { throw new ExcRepositorio("Driver não encontrado: " + e.getMessage()); } catch (SQLException e) { throw new ExcRepositorio("Erro abrindo conexão: " + e.getMessage()); } return con; } }
Salvar como: principal.java
import javax.swing.JOptionPane; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.view.JasperViewer; public class principal { public static void main(String[] args) throws JRException { repositorioProduto rep = new repositorioProduto(); JasperPrint relat; //Insere mais um produto e exibe o relatório String desc = JOptionPane.showInputDialog("Descrição do produto: "); double valor = Double.parseDouble(JOptionPane.showInputDialog("Valor: ")); produto prod = new produto(desc,valor); try { rep.inserir(prod); relat = rep.gerar(); JasperViewer.viewReport(relat, false); } catch (ExcRepositorio e) { JOptionPane.showMessageDialog(null, "Erro: " + e.getMessage()); } } }
Salvar como: produto.java
public class produto { private int cod; private String descricao; private double preco; public produto(String desc, double preco){ this.setDescricao(desc); this.setPreco(preco); } public int getcod() {return cod;} public String getDescricao() {return descricao;} public double getPreco() {return preco;} public void setcod(int cod) { this.cod = cod; } public void setDescricao(String desc){ this.descricao = desc; } public void setPreco(double pc){ this.preco = pc; } }
Salvar como: repositorioProduto.java
import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import java.util.HashMap; import javax.swing.JOptionPane; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; public class repositorioProduto{ public repositorioProduto() {} public void inserir(produto prod) throws ExcRepositorio{ String desc = prod.getDescricao(); double preco = prod.getPreco(); String SQL = "insert into tb_Produtos (descricao, preco) values " + "('" + desc + "', " + preco + ")"; Connection conn = null; Statement stat = null; try { conn = gConexao.getConexao(); stat = conn.createStatement(); stat.executeUpdate(SQL); } catch (SQLException e) { throw new ExcRepositorio("Erro na conexão ao inserir: " + e.getMessage()); } finally { if (stat != null) { try { stat.close(); } catch (SQLException e) { throw new ExcRepositorio("Erro ao fechar conexão: " + e.getMessage()); } } } } public JasperPrint gerar() throws ExcRepositorio{ JasperPrint rel = null; try { Connection con = gConexao.getConexao(); HashMap map = new HashMap(); String arquivoJasper = "relatorio.jasper"; rel = JasperFillManager.fillReport(arquivoJasper, map, con); } catch (JRException e) { JOptionPane.showMessageDialog(null,e.getMessage()); } return rel; } }
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 cópia do jxml como segurança.).
Seu projeto deve está assim:
Ufa !!! Agora é só executar, será solicitado dados para inserção de um produto, faça isto e já o veja incluído no relatório que será exibido.
Espero ter ajudado,
Wellington Marinheiro
https://www.livramento.yu.com.br/tutoriais/
[email protected]