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 abaixo:


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 abaixo:

Clçique 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 relatorio, qualquer um que voce clique, ele vai pedir para que salve, faça isto e dê o nome relatorio
Faça alguns teste com os botôes, caso o relatorio não seja exibido, verifique os passos anteriores pois neste ponto voce já deverá está ver o relatorio 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 relatorio novamente e pode fechar o iReport
Lembra-se que o relatorio 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 voce...

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 direiro e em New e Folder, dê o nome de lib Antes de tudo, vamos trazewr os arquivos do pacote iReport para o projeto
Acess 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? Vanmos 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 (ver 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 relatorio
		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 relatorio que será exibido.

Espero ter ajudado,
Wellington Marinheiro
wmarinheiro@hotmail.com