Sei sulla pagina 1di 22

SERVIÇO NACIONAL DE APRENDIZAGEM COMERCIAL

SENAC - RIO GRANDE DO SUL

JAVA AVANÇADO

S ERVIÇO N ACIONAL DE A PRENDIZAGEM C OMERCIAL SENAC - R IO G RANDE DO

Porto Alegre, 2007

JAVA AVANÇADO

1ª Edição

Elaboração e Edição

SENAC - Rio Grande do Sul

Documento produzido para uso interno do

SENAC - Rio Grande do Sul

SENAC.RS - Departamento Regional no Rio Grande do Sul

Java Avançado

1ª edição

Porto Alegre: SENAC – Informática / RS, 2007.

22 pp.

Sumário Linguage m Java 4 JDBC 4 API JDBC 4 Tipo 1 – Pont e

Sumário

Linguagem Java

4

JDBC

4

API JDBC

4

Tipo 1 – Ponte JDBC-ODBC

4

Tipo 2 – API Parcialmente nativa

4

Tipo 3 – Java puro JDBC-Rede

4

Tipo 4 Java Puro Protocolo Banco Nativo

4

Acessando dados via JDBC

5

java.sql.DriverManager

5

2.2 java.sql.Connection

5

Principais Métodos

5

2.3 Java.Sql.ResultSet

6

Principais Métodos

6

2.4

Java.sql.Statement

6

Principais Métodos

6

2.5

Java.sql.preparedStatement

6

Principais Métodos

6

2.6

java.sql.CallableStatement

7

Principais Métodos

7

3.0 Tutorial básico para selecionarmos dados de uma tabela via JDBC utilizando o comando SELECT da SQL

7

Primeiro passo: importar java.sql

7

Segundo passo: Carregar o Driver do banco de dados

7

Terceiro Passo: Criar uma conexão (seção) com o

7

Quarto Passo: Criar um Statement para executarmos um comando SELECT, armazenando o resultado em um ResultSet

8

Quinto passo: Percorrer a tabela recebendo os resultados

8

Relatórios com IReport

9

Fundamentos de JasperReports

9

Estrutura de um relatório Jasper

9

Report Template

9

Principais Componentes

10

Principais métodos do JasperReports

10

Estrutura de um relatório

10

Seções

10

Seções de um relatório Jasper

10

Parâmetros

11

Fields

11

DataSource

11

JRDataSource

12

Variáveis

12

Expressões

12

Tabela Resumo

13

Grupos

13

Subreports

14

Relatórios com IReport

19

Principais componentes do IReport

20

L INGUAGEM J AVA JDBC API JDBC A API JDBC dá acesso a informações de

LINGUAGEM JAVA

JDBC

API JDBC

A API JDBC dá acesso a informações de forma padronizada da linguagem Java. Ela

foi desenvolvida para que o programador Java programe de forma independente do banco de dados. Usando o JDBC você pode acessar virtualmente qualquer informação tabular, desde bancos de dados relacionais, planilhas de cálculo, ou até arquivos texto.

Quando instalamos o JDK, por padrão, esta API já está disponibilizada para o uso.

A API do JDBC é composta de dois pacotes

• java.sql

• javax.sql (utiliza características

(utilização básica)

“server side”)

Para utilizarmos o JDBC com um Banco de Dados relacional é necessário possuirmos os drivers específicos para este banco. Por exemplo, se estivermos utilizando o MySQL, devemos ter o driver JDBC para o mesmo.

Existem 4 tipos de drivers JDBC para escolhermos

TIPO 1 – PONTE JDBC-ODBC

Os drivers do “Tipo 1” providenciam acesso ao banco de dados através de chamadas nativas ao driver ODBC. Requer configuração adicional na máquina cliente. Devemos evitar a utilização em ambientes de produção, pois este é o tipo de driver mais lento, tendo a vantagem de já vir instalado com o SDK do Java.

TIPO 2 – API PARCIALMENTE NATIVA

Este tipo de driver converte chamadas JDBC para chamadas a API do banco de dados que queremos utilizados. Devemos notar que este driver utiliza códigos nativos para prover o acesso.

TIPO 3 – JAVA PURO JDBC-REDE

Este é o tipo de driver mais flexível. O driver acessa o banco de dados através de um protocolo intermediário de rede possibilitando o acesso ao Banco de Dados através de firewall.

TIPO 4 JAVA PURO PROTOCOLO BANCO NATIVO

Este driver acessa diretamente o banco de dados utilizando o protocolo nativo do mesmo. Em geral é o driver é o mais compacto e rápido.

A CESSANDO DADOS VIA JDBC Como vimos anteriormente, para utilizarmos o a API JDBC é
A CESSANDO DADOS VIA JDBC Como vimos anteriormente, para utilizarmos o a API JDBC é

ACESSANDO DADOS VIA JDBC

Como vimos anteriormente, para utilizarmos o a API JDBC é necessário termos os drivers específicos para o banco de dados que queremos utilizar. A lista oficial atualizada está em http://developers.sun.com/product/jdbc/drivers.

No nosso exemplo iremos utilizar o banco de dados MySQL e o driver J/Connector

Tipo

em

http://www.mysql.com/products/database/

respectivamente.

http://www.mysql.com/products/connector/j/

4,

que

pode

ser

baixado

e

no

site

do

fabricante

Vamos agora estudar os principais itens do pacote java.sql

JAVA.SQL.DRIVERMANAGER

A classe DriverManager é responsável por:

• Gerenciar o conjunto de drivers JDBC.

• Fazer a conexão com o banco de dados

• Controlar o login e as mensagens entre o banco de dados e o driver

Para que o DriverManager possa reconhecer o nosso driver é necessário carregá-lo na memória.

2.2 JAVA.SQL.CONNECTION

A interface Connection representa a sessão com o banco de dados.

PRINCIPAIS MÉTODOS

Método

Descrição

Assinatura*

createStatement()

Utilizado para submetermos comandos SQL

statement createStatement()

prepareStatement()

Utilizado em consultas parametrizadas

PreparedStatement prepareStatement()

prepareCall()

Utilizado para chamar “stored procedures”

CallableStatement prepareCall(String sql)

getMetaData()

Utilizado para obtermos informações do B.D.

DataBaseMetaData getMetaData()

Close()

Fecha a sessão liberando os recursos

void close()

* podem existir outras assinaturas possíveis.

2.3 J AVA .S QL .R ESULT S ET A interface ResultSet representa um conjunto

2.3 JAVA.SQL.RESULTSET

A interface ResultSet representa um conjunto de informações de um banco de dados

e é geralmente obtida através de uma consulta ao mesmo.

PRINCIPAIS MÉTODOS

Método

Descrição

Assinatura *

absolute()

Move o cursor para uma dada coluna

boolean absolute (int coluna)

Close()

Fecha liberando os recursos

void close()

first()

Move para o primeiro registro

boolean first()

last()

Move para o último registro

boolean last()

previos()

Move para o registro anterior

boolean previos()

next()

Move para o próximo registro

boolean next()

getString()

Retorna o valor como String

String getString(String coluna)

getBoolean()

Retorna o valor como boolean

boolean getBoolen(String coluna)

getShort()

Retorna o valor como short

short getShort(String coluna)

getInt()

Retorna o valor como int

int getFloat(String coluna)

getDate()

Retorna o valor como Java.sql.Date

Date getDate(String coluna)

getDouble()

Retorna o valor como double

double getDouble(String coluna)

getFloat

Retorna o valor como float

float getFloat(String coluna)

* podem existir outras assinaturas possíveis.

2.4 JAVA.SQL.STATEMENT

A interface Statement é responsável por executar os comandos SQL e o retorno dos

resultados

PRINCIPAIS MÉTODOS

Método

Descrição

Assinatura *

getConnection()

Retorna uma conexão

connection getConnection()

executeQuery()

Executa um comando SQL que retorna somente um resultado

ResultSet executeQuery(String sql)

executeUpdade()

Executa um comando INSERT, DELETE ou UPDATE ou comandos da DDL

int executeUpdate(String sql)

Close()

Fecha liberando os recursos

void close()

* podem existir outras assinaturas possíveis.

2.5 JAVA.SQL.PREPAREDSTATEMENT

A

interface

preparedStatement

é

responsável

por

executar

os

comandos

SQL

pré

compilados. Executam mais rapidamente, pois são preparados previamente.

PRINCIPAIS MÉTODOS

Método

Descrição

Assinatura *

executeQuery()

Executa um comando SQL que retorna somente um resultado

ResultSet executeQuery(String sql)

executeUpdade()

Executa um comando INSERT, DELETE ou UPDATE ou comandos da DDL

int executeUpdate(String sql)

setString()

Substitui um valor String pelo parâmetro indicado

void setString(int par, String valor)

setDouble Substitui um valor double pelo parâmetro indicado void setDouble(int par, double valor) setInt()

setDouble

Substitui um valor double pelo parâmetro indicado

void setDouble(int par, double valor)

setInt()

Substitui um valor int pelo parâmetro indicado

void setInt(int par, int valor)

clearParameters()

Limpa todos os parâmetros

void clearParameters()

Close()

Fecha liberando os recursos

void close()

2.6 JAVA.SQL.CALLABLESTATEMENT

A interface CallableStatement é a responsável por chamar “stored procedures”

PRINCIPAIS MÉTODOS

Método

Descrição

Assinatura *

setString()

Substitui um valor String pelo parâmetro indicado

void setString(int par, String valor)

setDouble

Substitui um valor double pelo parâmetro indicado

void setDouble(int par, double valor)

setInt()

Substitui um valor int pelo parâmetro indicado

void setInt(int par, int valor)

registerOutParameter()

Registra parâmetros de saida

void registerOutParameter(int num, int tipoSQL)

Close()

Fecha liberando os recursos

void close()

3.0 TUTORIAL BÁSICO PARA SELECIONARMOS DADOS DE UMA TABELA VIA JDBC UTILIZANDO O COMANDO SELECT DA SQL

PRIMEIRO PASSO: IMPORTAR JAVA.SQL

Para que possamos utilizar as classes do JDBC devemos importar este pacote.

import java.sql.*;

SEGUNDO PASSO: CARREGAR O DRIVER DO BANCO DE DADOS

Devemos carregar o driver dos bancos de dados que iremos utilizar.

No nosso exemplo a classe a ser carregada é a “com.mysql.jdbc.Driver”

Class.forName("com.mysql.jdbc.Driver");

Caso estejamos utilizando outro driver é necessário ler a

documentação do mesmo para sabermos qual classe devemos carregar.

TERCEIRO PASSO: CRIAR UMA CONEXÃO (SEÇÃO) COM O BANCO.

String url = "jdbc:mysql://localhost/mysql";

Connection c = DriverManager.getConnection(url,"root","");

Utilizamos para isto o método getConnection() da classe Driver Manager.

O parâmetro: url, contém a String de conecção que

"<Driver

é formatada da seguinte forma

IP

ou

Nome

da

Sun>:<Nome

do

Gerenciador

de

Banco>:<Endereço

Máquina>:<Porta>:NomeBanco>”

da

Sendo que <porta> é opcional se estivermos utilizando a padrão do banco de dados.

O segundo parâmetro é o usuário e o terceiro a senha da conexão com o banco de dados.

Q UARTO P ASSO : C RIAR UM S TATEMENT PARA EXECUTARMOS UM COMANDO SELECT,

QUARTO PASSO: CRIAR UM STATEMENT PARA EXECUTARMOS UM COMANDO SELECT, ARMAZENANDO O RESULTADO EM UM RESULTSET

Statement stmt = c.createStatement();

ResultSet rs = stmt.executeQuery("select * from mysql.user");

O statement contera o cmando SQL. Se estivéssemos

executando um UPDATE ou

DELETE deveríamos utilizaro executeUpdate() ao invés do executeQuery()

QUINTO PASSO: PERCORRER A TABELA RECEBENDO OS RESULTADOS.

while (rs.next()){ System.out.println("====================================="); System.out.println("Usuário: “ + rs.getString("user")); System.out.println("Senha: " + rs.getString("password")); System.out.println("Host: " + rs.getString("host")); System.out.println("=====================================");

}

O método next() do ResultSet avança um registro retornando true a não ser quando

não existem mais registros a percorrer.

O método getString() obtém uma String do ResultSet. Se a informação fosse do tipo

int, usariamos getInteger().

EExxeemmpplloo pprrááttiiccoo::

import java.sql.*; // Primeiro passo /**

*

* @author Humberto Moura */ public class TesteSelect { public void Conecta() { try { Class.forName("com.mysql.jdbc.Driver"); // Segundo Passo

}

catch (ClassNotFoundException c) { c.printStackTrace(); System.out.println("Erro" + c.getMessage());

}

try{

String url = "jdbc:mysql://localhost/mysql"; Connection c = DriverManager.getConnection(url,"root",""); Terceiro passo

//

Statement stmt = c.createStatement(); // Quarto passo ResultSet rs = stmt.executeQuery("select * from mysql.user"); while (rs.next()){ Quinto passo

//

System.out.println("====================================="); System.out.println("Usuário: " + rs.getString("user"));

System.out.println("Senha:

System.out.println("Host:

" + rs.getString("password")); " + rs.getString("host"));

System.out.println("====================================="); } rs.close(); stmt.close(); } catch(SQLException e){

System.out.println("=====================================");

}

rs.close();

stmt.close();

}

catch(SQLException e){ e.printStackTrace(); System.out.println("Erro" + e.getMessage());

}

}

}

RELATÓRIOS COM IREPORT

FUNDAMENTOS DE JASPERREPORTS

faz-se

necessário que saibamos o básico de JasperRepors.

JasperReports é um poderosa biblioteca, de código fonte aberto, para a criação de relatórios. Totalmente escrito em Java, essa biblioteca permitindo a geração de conteúdo dinâmico em relatórios para seres visualizados no vídeo, impressos diretamente, ou convertidos em formatos como PDF, HTML, XLS, CSV, RTF e XML. Podemos utilizá-lo em qualquer aplicação Java, incluindo programas para rodarem em desktop e Web, e aplicações distribuídas (J2EE).

Para

que

possamos

compreender

o

IReport

de

uma

maneira

mais

ampla,

ESTRUTURA DE UM RELATÓRIO JASPER

uma maneira mais ampla, E STRUTURA DE UM RELATÓRIO J ASPER R EPORT T EMPLATE O

REPORT TEMPLATE

O Template de relatório é um arquivo XML com uma estrutura especial. Esta estrutura está declarada em um arquivo com a extensão .dtd que é fornecido com o JasperReports.

formatação do relatório.

Pode conter textos, imagens, campos, a assim por diante.

O Template de relatório deve ser salvo com a extensão .jrxml. Ele precisa, posteriormente, ser compilado em formato binário específico do JasperReports para podermos visualizá-lo.

extensão .jasper. que é

representado por um objeto da classe JasperReport. Após termos este objeto, necessitamos alimentar o relatório com os dados. Isto pode ser feito através de um

DataSource ou de uma consulta direta ao Banco de Dados.

Este contém

todas as

informações sobre a

estrutura

e

a

Depois

de

compilado,

teremos

um

arquivo

com

a

Após termos o relatório preenchido, utilizando o método fillreport ou utilizando a conexão direta ao

Após termos o relatório preenchido, utilizando o método fillreport ou utilizando a

conexão direta ao banco obtemos um jasperprint, um arquivo com a extensão .jrprint que poderá ser, então visualizado com o JasperViewer ou ser exportado para um formato de

arquivo supotado (pdf, xls, html

).

PRINCIPAIS COMPONENTES

Nome

 

Descrição

Extensão

JasperDesign

O

template do relatório

jrxml

JasperReport

O

JasperDesign compilado

jasper

JasperPrint

O

relatório gerado

jrprint

PRINCIPAIS MÉTODOS DO JASPERREPORTS

Classe

Método

Descrição

Assinatura

JasperExportManager

exportReportToPdfFil

Exporta o relatório para o formato .pdf

exportReportToPdfFile(ja sperprint jp, String arquivo)

e()

JasperFillManager

fillReport()

Preenche o relatório com os dados

JasperPrint(JasperRepor t jr, HashMap mapa, DataSource ds)

JasperCompileManager

compileReport()

Compila o relatório

JasperReport

compileReport(String

relatjrxml)

Para criarmos um relatório simples podemos utilizar este modelo, salvando-o como Teste.jrxml

<?xml version="1.0"?> <!DOCTYPE jasperReport PUBLIC "-//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">

<jasperReport name="Teste" >

</jasperReport>

ESTRUTURA DE UM RELATÓRIO

SEÇÕES

As seções são partes de um relatório que contém uma altura e largura específica podendo conter objetos como linhas, imagens, textos estáticos e campos.

SEÇÕES DE UM RELATÓRIO JASPER

Seção

Descrição

<background>

Define uma seção de plano de fundo. É impressa em todas as páginas.

<title>

Define uma seção de Título. É impressa somente uma vez.

<pageHeader>

Define uma seção de cabeçalho de página. É impressa a cada página.

<columnHeader>

Define uma seção de cabeçalho de coluna. É impressa a cada página que contém uma banda detail. Se a página é dividida em uma ou mais colunas, esta banda é impressa em cada coluna.

<groupHeader>

Define uma seção de cabeçalho de grupo.

<detail>

Define uma seção de detalhe. É impressa a cada registro.

<groupFooter> Define uma seção de rodapé de grupo <columnFooter> Define uma seção de

<groupFooter>

Define uma seção de rodapé de grupo

<columnFooter>

Define uma seção de rodapé de coluna. É impressa a cada página que contém uma banda detail. Se a página é dividida em uma ou mais colunas, esta banda é impressa em cada coluna.

<pageFooter>

Define uma seçõa de rodapé da página. É impressa a cada página.

<lastPageFooter>

Defina uma seção de rodapé da última página. É impressa somente uma vez no final do documento, antes do sumário, se existir.

<Summary>

Defina uma seção de sumário. É impressa somente uma vez no fim do Relatório.

EExxeemmppllooss ddee sseeççõõeess::

<pageHeader> <band height="30"> <rectangle> <reportElement x="0" y="0" width="555" height="25"/> <graphicElement/> </rectangle> <staticText> <reportElement x="0" y="0" width="555" height="25"/> <textElement textAlignment="Center"> <font fontName="Helvetica" size="18"/> </textElement> <text>Lista de Pedidos</text> </staticText> </band> </pageHeader>

PARÂMETROS

Parâmetros são referências a objetos passados no momento de preenchimento dos dados no relatório.

Para declararmos os parâmetros devemos informar o seu nome e sua classe Java conforme exemplo:

<parameter name="Titulo”

<parameter name="MaxValor" class="java.lang.Integer"/>

<parameter name="Imagem"

class="java.lang.String"/>

class="java.awt.Image"/>

E para referenciarmos no código Java, utilizamos HashMap como no exemplo:

Map parametros = new HashMap( );

parametros.put( “Titulo”, “Java Desktop Developer” );

FIELDS

Fields (campos) servem para mapear informações do datasouce para as rotinas geradoras do relatório. Quando utilizamos um ResultSet, todos os campos deste devem ter o mesmo nome e tipos compatíveis nos fields.

EExxeemmpplloo::

<field name="Codigo" <field name="Nome"

<field name="DataNasc" class="java.util.Date"/>

class="java.lang.Integer"/>

class="java.lang.String"/>

DATASOURCE

DataSource é o componente do relatório que define a origem dos dados.

O Jasper interface Reports JRD ATA S OURCE . suporta vários tipos de DataSources implementados

O

Jasper

interface

Reports

JRDATASOURCE.

suporta

vários

tipos

de

DataSources

implementados

a

partir

da

Principais classes que implementam JRDataSource

Classe

Descrição

JREmptyDataSource

Simula um DataSouce com um número virtual de registros

JRResultSetDataSource

Uma implementação de um DataSource que implementa um ResultSet para os dados.

JRBeanCollectionDataSource

Uma implementação de um DataSource que utiliza um objeto Collection para os dados.

JRBeanArrayDataSource

Uma implementação de um DataSource que utiliza um objeto array para os dados

VARIÁVEIS

Variáveis são formas de armazenar valores temporários que poderão ser utilizados em expressões futuras. A vantagem de seu uso está na possibilidade de definirmos somente uma vez e podermos utilizá-la em diversas expressões.

soma

(sum), média (average), menor (lowest), maior (highest), etc.

Elas

podem

referenciar

tipos

internos

de

cálculos,

como

contagem

(count),

Por exemplo, calcular o valor total do produto:

<variable name=”ValorTotalProduto” class=”java.lang.Double” calculation=”Sum”>

<variable expression> ${ValorProduto} </variable expression>

</variable>

Algumas variáveis prontas para o uso:

Variável

Descrição

PAGE_NUMBER

Número da página

COLUMN_NUMBER

Número da coluna

REPORT_COUNT

Contador do Relatório

PAGE_COUNT

Contador de página

COLUMN_COUNT

Contador de Coluna

EXPRESSÕES

Expressões Jasper são basicamente expressões Java que podem referenciar campos, variáveis e parâmetros do relatório.

Para usarmos um campo em uma expressão usamos $F{NomeDocampo}

PPoorr eexxeemmpplloo,, ssee qquuiisseerrmmooss eexxiibbiirr ddooiiss ccaammppooss ccoonnccaatteennaaddooss uussaarrííaammooss oo sseegguuiinnttee ccóóddiiggoo::

<textField> <textFieldExpression> $F{Codigo} + " " + $F{Nome} </textFieldExpression> </textField>

E E x x p p r r e e s s s s õ

EExxpprreessssõõeess ppooddeemm sseerr bbeemm mmaaiiss ccoommpplleexxaass::

<textField> <textFieldExpression> $F{Codigo} + " " + $F{Nome} + "nasceu em" + (new SimpleDateFormat("MM/dd/yyyy")).format($F{DataNasc}) + "." </textFieldExpression> </textField>

<textField>

<textFieldExpression

class="java.lang.String"><![CDATA[$F{Nome}]]>

</textFieldExpression>

</textField>

PPaarraa uuttiilliizzaarrmmooss vvaarriiáávveeiiss eemm uummaa eexxpprreessssããoo,, uuttiilliizzaammooss oo $$VV{{}} ccoommoo nnoo eexxeemmpplloo aabbaaiixxoo::

<textField> <textFieldExpression> "Total : " + $V{SomaTotal} + " kg." </textFieldExpression> </textField>

PPaarraa uuttiilliizzaarrmmooss ppaarrââmmeettrrooss,, uuttiilliizzaammooss oo $$PP{{}} ccoommoo nnoo eexxeemmpplloo aabbaaiixxoo::

<textField> <textFieldExpression> "Número Mágico: " + $P{NumMag} </textFieldExpression> </textField>

TABELA RESUMO

Tipo

Símbolo

Variável

$V{NomeVariavel}

Parâmetro

$P{NomeParametro}

Campo (Field)

$F{NomeCampo}

GRUPOS

Grupos representam um modo flexível de organizar informação em um relatório.

Podemos agrupar as informações por qualquer dado na tabela como produto, nome, serviço etc.

Podemos inclusive gerar totalizadores que podem ser inseridos no rodapé do mesmo.

Nós podemos ter quantos grupos forem necessárias no relatório. A ordem dos grupos do relatório é relevante, pois eles se inter-relacionam. Um grupo contém o grupo seguinte e assim por diante.

um grupo de relatório, com suas expressões correspondentes,

devemos declarar duas seções: o cabeçalho e o rodapé do grupo.

Quando declaramos

S UBREPORTS Um subrelatório nada mais é do que um relatório dentro de outro. Isto

SUBREPORTS

Um subrelatório nada mais é do que um relatório dentro de outro. Isto possibilita a criação de relatórios complexos e simplificando o trabalho total.

Os subrelatórios são muito úteis para criarmos relatórios mestre-detalhe.

EExxeemmpplloo 11 -- AArrqquuiivvoo TTeesstteeJJaassppeerr jjrrxxmmll

<?xml version="1.0"?> <!DOCTYPE jasperReport PUBLIC "-//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">

<jasperReport name="TesteJasper"> <detail> <band height="20"> <staticText> <reportElement x="180" y="0" width="200" height="20"/> <text><![CDATA[Alô, Mundo]]></text> </staticText> </band> </detail> </jasperReport>

EExxeemmpplloo 22 CCoommppiillaannddoo ee eexxiibbiinnddoo oo TTeesstteeJJaassppeerr jjrrxxmmll

import net.sf.jasperreports.engine.*; public class TesteJasperReports

{

public static void main(String[] args)

{

JasperReport jasperReport; JasperPrint jasperPrint; try

{

jasperReport = JasperCompileManager.compileReport("TesteJasper.jrxml"); jasperPrint = JasperFillManager.fillReport(jasperReport, new HashMap(), new JREmptyDataSource());

JasperExportManager.exportReportToPdfFile(jasperPrint,"TesteJasper.pdf");

}

catch (JRException e)

{

e.printStackTrace();

}

}

}

E E x x e e m m p p l l o o s

EExxeemmppllooss ddee RReellaattóórriiooss

RReellaattrriiooBBaassiiccoo

jjrrxxmmll

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE jasperReport PUBLIC "-//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd"> <jasperReport name="RelatorioBasico" <parameter name="Title" class="java.lang.String"/> <queryString><![CDATA[select nome, custo from produto]]></queryString> <field name="NAME" class="java.lang.String"/> <field name="COST" class="java.lang.Double"/> <title> <band height="50"> <textField> <reportElement x="0" y="0" width="200" height="50" /> <textFieldExpression class="java.lang.String">$P{Title}</textFieldExpression> </textField> </band> </title> <pageHeader> <band> </band> </pageHeader> <columnHeader> <band height="20"> <staticText> <reportElement x="180" y="0" width="180" height="20"/> <textElement> <font isUnderline="true"/> </textElement> <text><![CDATA[NOME]]></text> </staticText> <staticText> <reportElement x="360" y="0" width="180" height="20"/> <textElement> <font isUnderline="true"/> </textElement> <text><![CDATA[CUSTO]]></text> </staticText> </band> </columnHeader> <detail> <band height="20"> <textField> <reportElement x="180" y="0" width="180" height="20"/>

<textFieldExpression class="java.lang.String"><![CDATA[$F{NOME}]]></textFieldExpression> </textField> <textField pattern="0.00"> <reportElement x="360" y="0" width="180" height="20"/>

<textFieldExpression class="java.lang.Double"><![CDATA[$F{CUSTO}]]></textFieldExpression>

<textFieldExpression class="java.lang.Double"><![CDATA[$F{CUSTO}]]></textFieldExpression> </textField> </band> </detail> <columnFooter> <band> </band> </columnFooter> <pageFooter> <band height="15"> <staticText> <reportElement x="0" y="0" width="40" height="15"/> <textElement/> <text><![CDATA[Page:]]></text> </staticText> <textField> <reportElement x="40" y="0" width="100" height="15"/> <textElement/> <textFieldExpression class="java.lang.Integer"><![CDATA[$V{PAGE_NUMBER}]]></textFieldExpression> </textField> </band> </pageFooter> <summary> <band> </band> </summary> </jasperReport>

import java.sql.Connection;import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.HashMap; import java.util.Map; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JRResultSetDataSource; import net.sf.jasperreports.engine.JasperCompileManager; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.design.JasperDesign; import net.sf.jasperreports.engine.xml.JRXmlLoader; import net.sf.jasperreports.view.JasperViewer;

public class JasperReportTeste {

private static final String url = "jdbc:mysql://127.0.0.1/mysql"; private static final String driver = "com.mysql.jdbc.Driver"; private static final String login = "root"; private static final String senha = "";

public JasperReportTeste() {

} public void criar(String arquivo) throws JRException , SQLException, ClassNotFoundException { //criando o jasper design

}

public void criar(String arquivo) throws JRException , SQLException, ClassNotFoundException { //criando o jasper design JasperDesign modelo = JRXmlLoader.load(arquivo);

//compila o relatório JasperReport relatorio = JasperCompileManager.compileReport( modelo

);

//estabelece conexão Class.forName( driver ); Connection con = DriverManager.getConnection( url , login , senha ); Statement stm = con.createStatement(); String consulta = "select * from mysql.user"; ResultSet rs = stm.executeQuery( consulta );

//implementação da interface JRDataSource para DataSource ResultSet JRResultSetDataSource jrRS = new JRResultSetDataSource( rs );

//executa o relatório Map parametros = new HashMap(); parametros.put("teste", new Double(10));

JasperPrint impressao = JasperFillManager.fillReport( relatorio ,

parametros,

jrRS );

//exibe o resultado JasperViewer viewer = new JasperViewer( impressao , true ); viewer.show();

}

public static void main(String[] args) { try {

new JasperReportExemple().criar( "relatorioteste.jrxml" ); } catch (Exception e) { e.printStackTrace();

}

}

}

import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.HashMap; import java.util.Map; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JRResultSetDataSource; import net.sf.jasperreports.engine.JasperCompileManager; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.design.JasperDesign;

import net.sf.jasperreports.engine.xml.JRXmlLoader; import net.sf.jasperreports.view.JasperViewer; public class

import net.sf.jasperreports.engine.xml.JRXmlLoader; import net.sf.jasperreports.view.JasperViewer;

public class JasperReportExemple {

private static final String url = "jdbc:mysql://127.0.0.1/teste"; private static final String driver = "com.mysql.jdbc.Driver"; private static final String login = ""; private static final String pwd = "";

public JasperReportExemple() {

}

public void gerar( String layout ) throws JRException , SQLException, ClassNotFoundException { //gerando o jasper design JasperDesign desenho = JRXmlLoader.load( layout );

//compila o relatório JasperReport relatorio = JasperCompileManager.compileReport( desenho

);

//estabelece conexão Class.forName( driver ); Connection con = DriverManager.getConnection( url , login , pwd ); Statement stm = con.createStatement(); String query = "select * from turma"; ResultSet rs = stm.executeQuery( query );

//implementação da interface JRDataSource para DataSource ResultSet JRResultSetDataSource jrRS = new JRResultSetDataSource( rs );

//executa o relatório Map parametros = new HashMap(); parametros.put("nota", new Double(10));

JasperPrint impressao = JasperFillManager.fillReport( relatorio ,

parametros,

jrRS );

//exibe o resultado JasperViewer viewer = new JasperViewer( impressao , true ); viewer.show();

}

public static void main(String[] args) { try {

new JasperReportExemple().gerar( "report.jrxml" ); } catch (Exception e) { e.printStackTrace();

}

}

}

R ELATÓRIOS COM IR EPORT O IReport é uma ferramenta visual, de código fonte a

RELATÓRIOS COM IREPORT

O IReport é uma ferramenta visual, de código fonte aberto, que permite gerar um relatório completo sem digitarmos nenhuma linha de programação. Seu uso está associado à produtividade, pois em minutos criamos relatórios ricos em detalhes, como figuras e gráficos, entre outros.

ricos em detalhes, como figuras e gráficos, entre outros . Figura 1 – Tela de apresentação

Figura 1 – Tela de apresentação do IReport

e gráficos, entre outros . Figura 1 – Tela de apresentação do IReport Figura 2 –

Figura 2 – Tela Principal do IReport

Está é a tela principal do IReport, onde podemos visualizar os principais componentes do IReport.

Está é a tela principal do IReport, onde podemos visualizar os principais componentes do IReport.

podemos visualizar os principais componentes do IReport. P RINCIPAIS COMPONENTES DO IR EPORT . Figura 3

PRINCIPAIS COMPONENTES DO IREPORT.

do IReport. P RINCIPAIS COMPONENTES DO IR EPORT . Figura 3 – propriedades do relatório. Esta

Figura 3 – propriedades do relatório.

Esta tela é onde configuramos as conexões com o banco de dados.

do relatório. Esta tela é onde configuramos as conexões com o banco de dados. Figura 4

Figura 4 – Propriedades da conexão

Para que possamos utilizar de uma forma padrão as configurações de fontes, cores podemos clicar

Para que possamos utilizar de uma forma padrão as configurações de fontes, cores podemos clicar no menu Formatar, Styles. Depois clicamos em new para definirmos um novo estilo.

Depois clicamos em new para definirmos um novo estilo. Figura 5 – Tela de configuração de

Figura 5 – Tela de configuração de estilos

Com

o

Report

Query

podemos

executar

consultas

SQL

no

banco

de

dados.

Para

chama-lo clicamos no menu Data, Query do Relatório.

Para chama-lo clicamos no menu Data, Query do Relatório. Figura 6 – Report Query No menu

Figura 6 – Report Query

No menu criar, além de executar os relatórios, podemos selecionar de que tipo de

arquivo (pdf, rtf, html, xls

)

queremos que nosso relatório seja visualizado.

Figura 7 – Menu Criar 22
Figura 7 – Menu Criar 22

Figura 7 – Menu Criar