Você está na página 1de 21

JAVA gerando relatrios no IReport com banco de dados Firebird

Fbio P. Santos www.chavesecreta.com.br admin@chavesecreta.com.br fpsgyn@gmail.com

JasperReports
uma biblioteca escrita inteiramente em JAVA que permite definir a criao de relatrios,
submetendo-o a uma fonte de dados.

A definio feita em XML e pode ser editada manualmente. O arquivo XML compilado em um arquivo .jasper que um arquivo .class normal com a extenso modificada. As expresses Java existentes dentro do XML sero verificadas em tempo de compilao. Este arquivo depois executado contra uma fonte de dados, que na maioria dos casos um banco de dados, ou fonte de dados compatvel. A biblioteca pode ser usada para visualizar o relatrio em tela ou gerar um arquivo, PDF, por exemplo. Estas caractersticas junto com a facilidade de utilizao e custo (open source) faz do JasperReports uma biblioteca de gerao de relatrio em JAVA completa.

iReport

O iReport uma ferramenta livre de desenho para o JasperReports. Cria desenhos sofisticados com grficos, imagens, tabelas de referncia cruzada e muito mais. Acessa dados atravs de JDBC, TableModels, JavaBeans, XML, Hibernate, CSV. Possibilita a publicao dos relatrios em PDF, XML, CSV, HTML, XHTML, textos, DOC, DOCX, OpenOffice. O JasperReports suporta vrios tipos de datasources (fonte de dados) atravs de uma interface especfica chamada JRDataSource. H uma implementao padro 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.

JasperForge
um site de desenvolvimento open source para projetos comunitrios e aplicaes de Business Intelligence.

http://jasperforge.org/ http://sourceforge.net/

Conhea o Firebird
Histria O Firebird derivado do cdigo do Borland InterBase 6.0. Ele tem o cdigo aberto e no possui licena dupla, portanto voc pode utiliz-lo em qualquer tipo de aplicao, seja ela comercial ou no, 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 eestvel. Principais Recursos Suporte total a Stored Procedures e Triggers Transaes compatveis com ACID (atomicidade, Consistncia, Isolamento e Durabilidade) Integridade Referencial Multi Generational Architecture Consome poucos recursos de processamento Linguagem nativa para Stored Procedures e Triggers (PSQL) Suporte para Funes Externas (UDFs) Praticamente no necessita de DBAs especializados Quase nenhuma configurao - instale e j comece a usar! Grande comunidade de usurios e vrios lugares para se obter suporte gratuito

Conhea o Firebird
Verso embedded do SGBD - perfeita para criao de catlogos em CDROM, aplicaes "demo" ou standalone Dezenas de ferramentas de terceiros, incluindo aplicaes grficas de administrao, replicao, etc. Careful writes - recuperao rpida, dispensa o uso de log de transaes! 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 disponveis Total controle de cursores em PSQL Tabelas de Monitoramento Triggers de conexo e transao Tabelas temporrias TraceAPI - saiba o que est acontecendo no servidor www.firebirdsql.org www.firebirdnews.org

JDBC Driver

JDBC - Especificao

Java Database Connectivity ou JDBC um conjunto de classes e interfaces (API) escritas em Java que
fazem o envio de instrues SQL para qualquer banco de dados relacional.

A API encapsula: 1. o estabelecimento da conexo com o BD 2. o envio de comandos SQL 3. o processamento dos resultados

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 mtodos JDBC em chamadas s funes do ODBC. Esta ponte normalmente usada quando no h um driver puro-Java (tipo 4) para determinado banco de dados, pois seu uso desencorajado devido dependncia 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 mquina 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 aplicaes clientes Java a vrios bancos de dados diferentes. o modelo mais flexvel.
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 prprios desenvolvedores. o tipo mais recomendado para ser usado.

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 esttico, que ir registrar essa classe como um driver JDBC, avisando o java.sql.DriverManager, pelo mtodo registerDriver. Connection conn = DriverManager.getConnection(........; Desta vez, o java.sql.DriverManager vai perguntar para cada Driver registrado, se ele aceita a String de conexo em questo. Se algum deles aceita esta String, a conexo aberta (pelo Driver), e retornada. Caso contrrio, uma exceo lanada. Pela prpria String de conexo, voc pode passar muitos outros parmetros (alm de login, senha e nome do banco de dados), a maioria de interesse do Driver, como por exemplo saber se aquela conexo deve estar em modo de auto reconexo caso ela caia, e muitos outros. Este tipo de informao est na documentao seu driver.

JDBC Conexo
Connection connFirebird = null; Connection connMySql = null; String host = localhost; Firebird String portaFirebird = 3050; String databasePrefixFirebird = jdbc:firebirdsql:; String dbNameFirebird = d:/localidades.fdb; String driverFirebird = org.firebirdsql.jdbc.FBDriver; String userNameFirebird = SYSDBA; String passwordFirebird = masterkey; MySql String portaMySql = 3306; String databasePrefixMySql = jdbc:mysql:; String dbNameMySql = localidades; String driverMySql = com.mysql.jdbc.Driver; String userNameMySql = root; String passwordMySql = root;

JDBC Conexo
try { Class.forName(driverFirebird).newInstance(); Class.forName(driverMysql).newInstance(); String urlFirebird = databasePrefixFirebird + host + "/" + portaFirebird + ":" + dbNameFirebird; String urlMySql = databasePrefixMySql+"//"+host+":"+portaMySql+"/"; connFirebird = DriverManager.getConnection(urlFirebird,userNameFirebird,passwordFirebird); connMySql = DriverManager.getConnection(urlMySql+dbNameMySql,userNameMySql,passwordMySql); System.out.println("Conectado ao banco Firebird ou MySql"); connFirebird.close(); conn.MySql.Close(); System.out.println("Desconectado do banco Firebird ou MySql"); } catch (Exception e) { e.printStackTrace(); }

JDBC Driver

Firebird = http://www.firebirdsql.org/index.php?op=devel&sub=jdbc

MySQL = http://dev.mysql.com/downloads/connector/j/

Oracle = http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html

PostgreSQL = http://jdbc.postgresql.org/

Estrutura de um Relatrio

Estrutura de um Relatrio
Title (Ttulo) a primeira band visvel na construo de um relatrio vazio. Esta seo s aparece uma vez no comeo do relatrio.

Page Header (cabealho da pgina) Esta seo aparece no comeo de cada pgina impressa.
Column Header (cabealho da coluna) Esta seo s aparece no comeo de cada interao com a band detail. Detail (detalhe) Esta band o local de exibio dos dados de um objeto datasource ou query. Esta seo se repete enquanto houver linhas para serem colocadas no seu relatrio de acordo com o resultado transmitido. Column Footer (rodap da coluna) Esta seo aparece abaixo de cada coluna. Anlogo ao Column Header. Page Footer (rodap da pgina) Representa o rodap da pgina. Esta seo aparece no final de cada pgina. Summary (sumrio/resumo) Rodap do relatrio, s aparece uma vez ao trmino do relatrio. Obs.: As bands Title e Summary no so inclusas no cabealho da pgina quando impressa em uma pgina separada.

Campos, Parmetros
Campos (Fields) so reas especficas que recebero 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 relatrio, um campo Nome deve ser definido no arquivo XML da seguinte forma: <field name=Nome class=java.lang.String/>

Parmetros so dados passados para a operao de preenchimento, que no podem ser


encontrados normalmente na fonte de dados. So declarados, por exemplo, da seguinte forma:
<parameter name= TituloDoRelatorio class=java.lang.String/>

E passados via cdigo Java, atravs da classe HashMap:


Map parametros = new HashMap( ); parametros.put( Nome, Aluno da FANAP );

Outra importante utilizao de parmetros na query do relatrio. Por exemplo:


Select * FROM CLIENTE WHERE CLIENTE=$P{Cliente}

Variveis
Variveis so utilizadas para armazenar resultados temporrios necessrios para gerao do
relatrio. Elas podem referenciar tipos internos de clculos, como contagem (count), soma (sum), mdia (average), menor (lowest), maior (highest), etc.
Por exemplo, o clculo do valor total da compra: <variable name=ValorTotalCompraSum class=java.lang.Double calculation=Sum> <variable expression> ${ValorProduto} </variable expression> </variable>

Existem tambm variveis internas da ferramenta, com nomes auto-explicativos, prontas para o uso nas expresses: PAGE_NUMBER, COLUMN_NUMBER, REPORT_COUNT, PAGE_COUNT, COLUMN_COUNT.

Expresses
Expresses (Expressions) so utilizadas para especificar o contedo de campos de texto, na
realizao de clculos frequentes, por exemplo.

Todas elas so expresses Java que podem conter em sua sintaxe: 1. campos: acessado com $F{nome} 2. parmetros: acessado com $P{nome} 3. variveis de relatrio: acessado com $V{nome}. Exemplo de uma expresso:
<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>

Mos na Massa

ireport.chavesecreta.com.br

Perguntas

Agradecimentos
Fbio P. Santos fpsgyn@gmail.com http://www.chavesecreta.com.br / fabio@chavesecreta.com.br

Muito Obrigado !!!

Você também pode gostar