Este documento fornece instruções sobre como gerar relatórios no IReport usando o banco de dados Firebird. Ele descreve o JasperReports, iReport e JDBC e como conectar ao Firebird para gerar relatórios.
1. JAVA® gerando relatórios no IReport
com banco de dados Firebird
Fábio P. Santos – www.chavesecreta.com.br
admin@chavesecreta.com.br
fpsgyn@gmail.com
2. JasperReports
É uma biblioteca escrita inteiramente em JAVA que permite definir a criação de relatórios,
submetendo-o a uma fonte de dados.
A definição é feita em XML e pode ser editada manualmente.
O arquivo XML é compilado em um arquivo .jasper que é um arquivo .class normal com a extensão
modificada. As expressões Java existentes dentro do XML serão verificadas em tempo de compilação.
Este arquivo é depois executado contra uma fonte de dados, que na maioria dos casos é um banco
de dados, ou fonte de dados compatível.
A biblioteca pode ser usada para visualizar o relatório em tela ou gerar um arquivo, PDF, por
exemplo.
Estas características junto com a facilidade de utilização e custo (open source) faz do JasperReports
uma biblioteca de geração de relatório em JAVA completa.
3. iReport
O iReport é uma ferramenta livre de desenho para o JasperReports. Cria desenhos sofisticados com
gráficos, imagens, tabelas de referência cruzada e muito mais.
Acessa dados através de JDBC, TableModels, JavaBeans, XML, Hibernate, CSV.
Possibilita a publicação dos relatórios em PDF, XML, CSV, HTML, XHTML, textos, DOC, DOCX,
OpenOffice.
O JasperReports suporta vários tipos de datasources (fonte de dados) através de
uma interface específica chamada JRDataSource.
Há uma implementação padrão desta interface para objetos ResultSet, chamada
JRResultSetDataSource.
No linguajar “Jasper", um datasource somado a um arquivo .jasper gera um
"print", que pode ser "exportado" para os formatos PDF, HTML, XML, CVS ou XLS.
4. JasperForge
É um site de desenvolvimento open source para projetos comunitários e aplicações de Business
Intelligence.
http://jasperforge.org/
http://sourceforge.net/
5. Conheça o Firebird
História
O Firebird é derivado do código do Borland InterBase 6.0. Ele tem o código aberto e não possui
licença dupla, portanto você pode utilizá-lo em qualquer tipo de aplicação, seja ela comercial ou não,
sem pagar nada por isso - é totalmente GRATUITO!
A tecnologia usada no Firebird tem mais de 20 anos, fazendo com que ele seja um produto
muito maduro eestável.
Principais Recursos
Suporte total a Stored Procedures e Triggers
Transações compatíveis com ACID (atomicidade, Consistência, Isolamento e Durabilidade)
Integridade Referencial
Multi Generational Architecture
Consome poucos recursos de processamento
Linguagem nativa para Stored Procedures e Triggers (PSQL)
Suporte para Funções Externas (UDFs)
Praticamente não necessita de DBAs especializados
Quase nenhuma configuração - instale e já comece a usar!
Grande comunidade de usuários e vários lugares para se obter suporte gratuito
6. Conheça o Firebird
Versão embedded do SGBD - perfeita para criação de catálogos em CDROM, aplicações
"demo" ou standalone
Dezenas de ferramentas de terceiros, incluindo aplicações gráficas de administração,
replicação, etc.
Careful writes - recuperação rápida, dispensa o uso de log de transações!
Diversas formas de acesso ao banco de dados: nativo/API, dbExpress, ODBC, OLEDB, .Net
provider, JDBC nativo tipo 4, Python module, PHP, Perl, etc.
Suporte nativo para os maiores sistemas operacionais, incluindo o Windows, Linux,
Solaris, MacOS.
Backups incrementais
Builds de 64bits disponíveis
Total controle de cursores em PSQL
Tabelas de Monitoramento
Triggers de conexão e transação
Tabelas temporárias
TraceAPI - saiba o que está acontecendo no servidor
www.firebirdsql.org
www.firebirdnews.org
8. JDBC - Especificação
Java Database Connectivity ou JDBC é um conjunto de classes e interfaces (API) escritas em Java que
fazem o envio de instruções SQL para qualquer banco de dados relacional.
A API encapsula:
1. o estabelecimento da conexão com o BD
2. o envio de comandos SQL
3. o processamento dos resultados
9. JDBC - Tipos
Tipo 1: Ponte JDBC-ODBC
É o tipo mais simples mas restrito à plataforma Windows. Utiliza ODBC para conectar-se com o banco
de dados, convertendo métodos JDBC em chamadas às funções do ODBC. Esta ponte é normalmente
usada quando não há um driver puro-Java (tipo 4) para determinado banco de dados, pois seu uso é
desencorajado devido à dependência de plataforma.
Tipo 2: Driver API-Nativo
O driver API-Nativo traduz as chamadas JDBC para as chamadas da API cliente do banco de dados
usado. Como a Ponte JDBC-ODBC, pode precisar de software extra instalado na máquina cliente.
Tipo 3: Driver de Protocolo de Rede
Traduz a chamada JDBC para um protocolo de rede independente do banco de dados utilizado, que é
traduzido para o protocolo do banco de dados por um servidor. Por utilizar um protocolo
independente, pode conectar as aplicações clientes Java a vários bancos de dados diferentes. É o
modelo mais flexível.
Tipo 4: Driver nativo
Converte as chamadas JDBC diretamente no protocolo do banco de dados. Implementado em Java,
normalmente é independente de plataforma e escrito pelos próprios desenvolvedores. É o tipo mais
recomendado para ser usado.
10. JDBC - Carga
Class.forName(“org.firebirdsql.jdbc.FBDriver”);
Class.forName(“com.mysql.jdbc.Driver”);
O Class Loader tenta inicializar esta classe. Esta classe (que é o nosso driver jdbc) possui um bloco
inicializador estático, que irá registrar essa classe como um driver JDBC, avisando
o java.sql.DriverManager, pelo método registerDriver.
Connection conn = DriverManager.getConnection(........;
Desta vez, o java.sql.DriverManager vai perguntar para cada Driver registrado, se ele aceita a String
de conexão em questão. Se algum deles aceita esta String, a conexão é aberta (pelo Driver), e
retornada. Caso contrário, uma exceção é lançada. Pela própria String de conexão, você pode passar
muitos outros parâmetros (além de login, senha e nome do banco de dados), a maioria de interesse
do Driver, como por exemplo saber se aquela conexão deve estar em modo de auto reconexão caso
ela caia, e muitos outros. Este tipo de informação está na documentação seu driver.
15. Estrutura de um Relatório
Title (Título) – É a primeira band visível na construção de um relatório vazio. Esta seção só aparece
uma vez no começo do relatório.
Page Header (cabeçalho da página) – Esta seção aparece no começo de cada página impressa.
Column Header (cabeçalho da coluna) – Esta seção só aparece no começo de cada interação com a
band detail.
Detail (detalhe) – Esta band é o local de exibição dos dados de um objeto datasource ou query. Esta
seção se repete enquanto houver linhas para serem colocadas no seu relatório de acordo com o
resultado transmitido.
Column Footer (rodapé da coluna) – Esta seção aparece abaixo de cada coluna. Análogo ao Column
Header.
Page Footer (rodapé da página) – Representa o rodapé da página. Esta seção aparece no final de
cada página.
Summary (sumário/resumo) – Rodapé do relatório, só aparece uma vez ao término do relatório.
Obs.: As bands Title e Summary não são inclusas no cabeçalho da página quando impressa em uma
página separada.
16. Campos, Parâmetros
Campos (Fields) são “áreas específicas” que receberão diretamente os dados das respectivas colunas
referenciadas. Por exemplo, para os dados da coluna Nome do tipo VARCHAR, da tabela Cliente,
serem mapeados para o relatório, um campo Nome deve ser definido no arquivo XML da seguinte
forma: <field name=“Nome” class=“java.lang.String”/>
Parâmetros são dados passados para a operação de preenchimento, que não podem ser
encontrados normalmente na fonte de dados. São declarados, por exemplo, da seguinte forma:
<parameter name=”TituloDoRelatorio” class=”java.lang.String”/>
E passados via código Java, através da classe HashMap:
Map parametros = new HashMap( );
parametros.put( “Nome”, “Aluno da FANAP” );
Outra importante utilização de parâmetros é na query do relatório. Por exemplo:
Select * FROM CLIENTE WHERE CLIENTE=$P{Cliente}
17. Variáveis
Variáveis são utilizadas para armazenar resultados temporários necessários para geração do
relatório. Elas podem referenciar tipos internos de cálculos, como contagem (count), soma (sum),
média (average), menor (lowest), maior (highest), etc.
Por exemplo, o cálculo do valor total da compra:
<variable name=“ValorTotalCompraSum” class=“java.lang.Double” calculation=“Sum”>
<variable expression>
${ValorProduto}
</variable expression>
</variable>
Existem também variáveis internas da ferramenta, com nomes “auto-explicativos”, prontas para o uso
nas expressões: PAGE_NUMBER, COLUMN_NUMBER, REPORT_COUNT, PAGE_COUNT,
COLUMN_COUNT.
18. Expressões
Expressões (Expressions) são utilizadas para especificar o conteúdo de campos de texto, na
realização de cálculos frequentes, por exemplo.
Todas elas são expressões Java que podem conter em sua sintaxe:
1. campos: acessado com $F{nome}
2. parâmetros: acessado com $P{nome}
3. variáveis de relatório: acessado com $V{nome}.
Exemplo de uma expressão:
<textFieldExpression>
“Sr.(a) ” + $F{Cliente} + " realizou um total de compras no valor de " +
$V{ValorTotalCompraSum} + " no dia " + (new SimpleDateFormat("dd/MM/yyyy")).format($F{DataCompra}) +
"."
</textFieldExpression>