JAVA® gerando relatórios no IReport
com banco de dados Firebird
Fábio P. Santos – [email protected]@gmail.com
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ãomodificada. 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 bancode dados, ou fonte de dados compatível.
A biblioteca pode ser usada para visualizar o relatório em tela ou gerar um arquivo, PDF, porexemplo.
Estas características junto com a facilidade de utilização e custo (open source) faz do JasperReportsuma biblioteca de geração de relatório em JAVA completa.
iReport
O iReport é uma ferramenta livre de desenho para o JasperReports. Cria desenhos sofisticados comgrá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 deuma interface específica chamada JRDataSource.
Há uma implementação padrão desta interface para objetos ResultSet, chamadaJRResultSetDataSource.
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 comunitários e aplicações de BusinessIntelligence.
http://jasperforge.org/
http://sourceforge.net/
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 possuilicenç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 produtomuito 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
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, .Netprovider, 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
JDBC Driver
JDBC - Especificação
Java Database Connectivity ou JDBC é um conjunto de classes e interfaces (API) escritas em Java quefazem 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
JDBC - Tipos
Tipo 1: Ponte JDBC-ODBC
É o tipo mais simples mas restrito à plataforma Windows. Utiliza ODBC para conectar-se com o bancode dados, convertendo métodos JDBC em chamadas às funções do ODBC. Esta ponte é normalmenteusada 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 dadosusado. 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 protocoloindependente, pode conectar as aplicações clientes Java a vários bancos de dados diferentes. É omodelo 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 maisrecomendado 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 blocoinicializador estático, que irá registrar essa classe como um driver JDBC, avisandoo 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 Stringde conexão em questão. Se algum deles aceita esta String, a conexão é aberta (pelo Driver), eretornada. Caso contrário, uma exceção é lançada. Pela própria String de conexão, você pode passarmuitos outros parâmetros (além de login, senha e nome do banco de dados), a maioria de interessedo Driver, como por exemplo saber se aquela conexão deve estar em modo de auto reconexão casoela caia, e muitos outros. Este tipo de informação está na documentação seu driver.
JDBC – Conexão
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 – Conexão
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 Relatório
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ó apareceuma 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 aband detail.
Detail (detalhe) – Esta band é o local de exibição dos dados de um objeto datasource ou query. Estaseção se repete enquanto houver linhas para serem colocadas no seu relatório de acordo com oresultado transmitido.
Column Footer (rodapé da coluna) – Esta seção aparece abaixo de cada coluna. Análogo ao ColumnHeader.
Page Footer (rodapé da página) – Representa o rodapé da página. Esta seção aparece no final decada 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 umapágina separada.
Campos, Parâmetros
Campos (Fields) são “áreas específicas” que receberão diretamente os dados das respectivas colunasreferenciadas. 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 seguinteforma: <field name=“Nome” class=“java.lang.String”/>
Parâmetros são dados passados para a operação de preenchimento, que não podem serencontrados 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}
Variáveis
Variáveis são utilizadas para armazenar resultados temporários necessários para geração dorelató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 usonas expressões: PAGE_NUMBER, COLUMN_NUMBER, REPORT_COUNT, PAGE_COUNT,COLUMN_COUNT.
Expressões
Expressões (Expressions) são utilizadas para especificar o conteúdo de campos de texto, narealizaçã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>
Mãos na Massa
ireport.chavesecreta.com.br
Perguntas
Agradecimentos
Fábio P. Santos – [email protected]
http://www.chavesecreta.com.br / [email protected]
Muito Obrigado !!!
Top Related