PUBLICIDADE
Este artigo tem nota
10

Autor

marinheiro

Wellington Marinheiro

membro deste maio de 2008

Compartilhe e guarde

  • Rec6
  • StumbleUpon
  • ueba
  • linkk
  • dihitt
  • linkloko
  • linkto
  • Technorati
  • Simpy
  • del.icio.us
  • Faves: Fave It!

PUBLICIDADE

Enquete

Que banco de dados você utiliza em seus projetos?
quinta-feira, 15 de maio de 2008

Gerando relatórios com iReport e Java


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
http://www.livramento.yu.com.br/tutoriais/
wmarinheiro@hotmail.com
Sim   Não   Este artigo foi útil para você?
NotaComentário
10
usertop comentou em 27/11/2009

Muito bom

otimo exelente muito bom funciona legal
10
brunoxt comentou em 24/6/2009

opa muito obrigado

Ajudou bastante.
fiz o exemplo numa versao diferente:
IReport 3.5.2 e postgreSQL 8.3 como banco.
a aplicação funfou, mas nao inseriu ao banco, diz nao achar a tabela.
mudei a url e o driver, e fiz tudo que foi pedido pelo jasper..
10
brunoxt comentou em 24/6/2009

opa muito obrigado

Primeiramente obrigado pelo post, ajudou bastante.
tentei fazer seu exemplo com uma versao diferente:
IReport 3.5.2 e postgreSQL 8.3 como banco.
a aplicação funfou, mas na hora de inserir ao banco diz nao achar a
Regras:
Os comentários seguem as seguintes regras:
  • Todos os comentários são enviados por membros cadastrados no site.
  • A pontuação de comentários de conteúdo do próprio membro não serão computados.
  • Os comentários serão pré-aprovados, porém a equipe do site revisará o conteúdo de todos os comentários podendo ser invalidados (inclusive a pontuação).
  • Os comentários precisam ter, obrigatóriamente, coerência sobre o conteúdo que será comentado.
  • O membro que atingir 5 comentários invalidados não poderá mais comentar dentro do site. Com isso o membro não poderá mais ganhar pontos com comentários.
  • Há um limite de 10 comentários por dia para cada membro.
  • Qualquer comentário após ter sido publicado poderá ser retirado através da opção ( denunciar)

Comente

     (ainda não tem cadastro? clique aqui!)


Máximo de 30 caracteres

Máximo de 255 caracteres
 

R&W Consulting - Soluções Web Hospedagem UOL HOST PagSeguro - solução para pagamentos online
© 2006-2010 R&W Informática Ltda. - Todos os direitos reservados.