Passagem de parametro do netbeans para o ireport

22 respostas
A

Oi galera …
eu to fazendo um aplicativo no Netbeans 6.9.1 para que fazer a passagem d parametro para o Ireport 4 .Ond seleciona num Conbobox o que será impresso…

eu ja vi muitos,muitos código e varios Tópicos aki … mais nenhum deu certo…

Alguém poderia me ajuda??? :?: :?:

22 Respostas

R

Cara primeiramente sua IDE não interessa quando você vai desenvolver um sistema.
No caso do IReport a maneira mais facil de você ultilizar é compilar para .jasper, e no java criar um map com nomeDoParametro e Valor e dar um fill no JasperPrint(Não lembro agora o nome kkk ).

Cara não me recordo como faz isso, mas dando uma procurada no google acho que você não vai ter problema em encontrar.
Você pode ficar confuso porque tem varios exemplos onde o cara compila o arquivo xml do jasper etc… etc…

J

Olá, para voce passar um parametro do java para o IReport é simples.
Primeiramente vá no IReport e crie um parametro em Parameters, de um nome para ele ex: meuParametro.
Agora va no seu arquivo java e faça o seguinte para gerar o relatorio

// exemplo para criar um  ResultSet
String SQL = "select * from suaTabela";
PreparedStatement stm = suaConexao.prepareStatement(SQL);
ResultSet resultSet = stm.executeQuery();

JRResultSetDataSource jrRS = new JRResultSetDataSource(resultSet); // cria o JRResultSetDataSource passando o ResultSet
Map<Object,Object> parametros = new HashMap<Object,Object>();
InputStream relatorio =  this.getClass().getClassLoader().getResourceAsStream("relatorios/seuRelatorio.jasper"); // coloque o endereço corretamente aonde esta o seu relatório

//manda os parametros para o IReport
parametros.put("aqui o que voce quer mandar", meuParementro);   // recebe o valor que voce quer mandar e o nome do seu parametro la no IReport (voce pode mandar quantos parametros voce quiser)

// e por ultimo para imprimir

JasperPrint jasperPrint = JasperFillManager.fillReport(relatorio, parametros,jrRS);
JasperViewer.viewReport(jasperPrint,false);

Espero ter ajudado

A

julianolandim:
Olá, para voce passar um parametro do java para o IReport é simples.
Primeiramente vá no IReport e crie um parametro em Parameters, de um nome para ele ex: meuParametro.
Agora va no seu arquivo java e faça o seguinte para gerar o relatorio

// exemplo para criar um  ResultSet
String SQL = "select * from suaTabela";
PreparedStatement stm = suaConexao.prepareStatement(SQL);
ResultSet resultSet = stm.executeQuery();

JRResultSetDataSource jrRS = new JRResultSetDataSource(resultSet); // cria o JRResultSetDataSource passando o ResultSet
Map<Object,Object> parametros = new HashMap<Object,Object>();
InputStream relatorio =  this.getClass().getClassLoader().getResourceAsStream("relatorios/seuRelatorio.jasper"); // coloque o endereço corretamente aonde esta o seu relatório

//manda os parametros para o IReport
parametros.put("aqui o que voce quer mandar", meuParementro);   // recebe o valor que voce quer mandar e o nome do seu parametro la no IReport (voce pode mandar quantos parametros voce quiser)

// e por ultimo para imprimir

JasperPrint jasperPrint = JasperFillManager.fillReport(relatorio, parametros,jrRS);
JasperViewer.viewReport(jasperPrint,false);

Espero ter ajudado

EI… EU NAUM CONSEGUI …Esse código cria um classe ou coloca no botão ???..

E quando eu coloco o nome do meuParametro naum aceita…

I muito obrgado…

J

oi ananda_8 desculpe eu coloquei o put invertido, primeiro em parênteses você coloca o nome do seu parametro (o que voce definiu no ireport) e depois o valor que você quer mandar.
entao fica assim:

parametros.put("meuParametro", "valor que voce ira mandar");

isso que te passei é um método, voce chama ele no botão que você ira imprimir.

A

to com problema com essa linha …

ResultSet resultSet = stm.executeQuery();

ta um erro na minha conexão…

J

me passa como voce esta fazendo a conexao

A
package utilitarios;

import java.sql.SQLException;

import java.sql.<em>;

import javax.swing.</em>;

public class conexao{

final private String driver = sun.jdbc.odbc.JdbcOdbcDriver;

final private String url = jdbc:odbc:sistema_escola;

final private String usuario = “”;

final private String senha = “”;

private Connection conexao;

public  Statement statement;

public  ResultSet resultset;

public boolean conecta(){

boolean result = true;

try{

Class.forName(driver);

conexao = DriverManager.getConnection(url, usuario, senha);

System.out.println(Conectou ao Banco de dados);

}catch(ClassNotFoundException Driver){

JOptionPane.showMessageDialog(null, "Driver não localizado: " + Driver);

result = false;

}catch(SQLException Fonte){

JOptionPane.showMessageDialog(null, "Deu erro na conexão com a fonte de dados: " + Fonte);

result = false;

}

return result;

}

public void desconecta(){

boolean result = true;

try{

conexao.close();

System.out.println(Banco de Dados Fechado);

}catch(SQLException erroSQL){

JOptionPane.showMessageDialog(null, Não foi possível fechar o Banco de Dados + erroSQL.getMessage());

result = false;

}

}

public void executeSQL(String sql){

try{

statement = conexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_READ_ONLY);

resultset = statement.executeQuery(sql);

}catch(SQLException sqlex){

JOptionPane.showMessageDialog(null, Não foi possível executar o comando SQL\n + sqlex + “\n\no comando SQL passado foi: \n + sql + sqlex.getMessage());

}

}
public Connection getConnection() {
    throw new UnsupportedOperationException("Not yet implemented");
}

}

F

ananda_8,

1 - Pq ta usando ODBC ?
2 - Qual banco esta usando ?
3 - Quando for postar aqui, trechos de codigos coloque entre as tags CODE
4 - Pesquise sobre Pattern Dao
5 - Leia a apostila FJ21 na parte de DAO
6 - Siga o esquema q o juliano te passou.

t+ e boa sorte

J

Faça o seguinte, vamos criar uma outra classe de conexao assim fica mais facil de eu te ajudar.
Crie uma classe e de o nome para dela de Conexao e copie o codigo abaixo:

public class Conexao{
    
    final private String driver = "sun.jdbc.odbc.JdbcOdbcDriver"; 
    final private String url = "jdbc:odbc:sistema_escola"; 
    final private String usuario = ""; 
    final private String senha = "";
    
    public static Connection getConnection() throws SQLException{
        try {
             Class.forName(driver);                             
             return DriverManager.getConnection(url, usuario, senha);                         
        } catch (ClassNotFoundException e) {
            JOptionPane.showMessageDialog(null, e.getMessage());            
            throw new SQLException();            
        }
        
    } 
    
}

agora vá na sua classe que voce esta usando para gerar o relatório e chame ela da seguinte maneira

Connection suaConexao = Conexao.getConnection();
// agora que voce tem a conexao basta fazer como eu fiz
 String SQL = "select * from suaTabela";  
PreparedStatement stm = suaConexao.prepareStatement(SQL);  
ResultSet resultSet = stm.executeQuery();

espero que agora de certo e se nao der me fale.

A

eu to com o problema nesse código…

Class.forName(driver); return DriverManager.getConnection(url, usuario, senha);

… vc sab o pq??

A

fernandopaiva:
ananda_8,

1 - Pq ta usando ODBC ?
2 - Qual banco esta usando ?
3 - Quando for postar aqui, trechos de codigos coloque entre as tags CODE
4 - Pesquise sobre Pattern Dao
5 - Leia a apostila FJ21 na parte de DAO
6 - Siga o esquema q o juliano te passou.

t+ e boa sorte

Pq ta usando ODBC ? R: eu naum sei outra meneira d fazer "caminho " do BD para a aplicação… Se vc sab por favor me ensina…(Eu to com problema no .jar pois quando eu coloco no outro PC eu naum encontro o Bd pra fazer a coneXão com ODBC…

o BD é Access .

E valeu pelas dicas…

J

ananda_8:
eu to com o problema nesse código…

Class.forName(driver); return DriverManager.getConnection(url, usuario, senha);

… vc sab o pq??

na classe Conexao voce importou o java.sql ?

import java.sql.*;
import javax.swing.JOptionPane;

public class Conexao{  
      
    final private String driver = "sun.jdbc.odbc.JdbcOdbcDriver";   
    final private String url = "jdbc:odbc:sistema_escola";   
    final private String usuario = "";   
    final private String senha = "";  
      
    public static Connection getConnection() throws SQLException{  
        try {  
             Class.forName(driver);                               
             return DriverManager.getConnection(url, usuario, senha);                           
        } catch (ClassNotFoundException e) {  
            JOptionPane.showMessageDialog(null, e.getMessage());              
            throw new SQLException();              
        }  
          
    }   
      
}

porque voce não usa o MySql ao invés do Access ?

J

ananda_8:
eu to com o problema nesse código…

Class.forName(driver); return DriverManager.getConnection(url, usuario, senha);

… vc sab o pq??

se voce importou o java.sql.* e mesmo assim esta dando erro peço para que você mande o erro pra gente te falar o que esta acontecendo

J

ananda_8:
fernandopaiva:
ananda_8,

1 - Pq ta usando ODBC ?
2 - Qual banco esta usando ?
3 - Quando for postar aqui, trechos de codigos coloque entre as tags CODE
4 - Pesquise sobre Pattern Dao
5 - Leia a apostila FJ21 na parte de DAO
6 - Siga o esquema q o juliano te passou.

t+ e boa sorte

Pq ta usando ODBC ? R: eu naum sei outra meneira d fazer "caminho " do BD para a aplicação… Se vc sab por favor me ensina…(Eu to com problema no .jar pois quando eu coloco no outro PC eu naum encontro o Bd pra fazer a coneXão com ODBC…

o BD é Access .

E valeu pelas dicas…

é claro que não vai encontrar o BD quando você colocar em outra maquina, você quem que colocar na url da sua conexão o ip da maquina que esta o BD
agora a respeito do ODBC se eu fosse você usaria o banco de dados MySql e para conectar usaria o driver para conectar ao inves do odbc

F

ananda_8, pra vc q ta começando
eh melhor ler as apostilas FJ11 e FJ21 da Caelum…vaum te auxiliar muiiito
e para de usar Access use pelo menos SQLite

t+ e boa sorte.

A

Eu importei…

Aff ta cheio d erro…

Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: Uncompilable source code at relatório.rela.jButton1ActionPerformed(rela.java:351) at relatório.rela.access$400(rela.java:24) at relatório.rela$5.actionPerformed(rela.java:243)

esse é um deles…

A

é claro que não vai encontrar o BD quando você colocar em outra maquina, você quem que colocar na url da sua conexão o ip da maquina que esta o BD
agora a respeito do ODBC se eu fosse você usaria o banco de dados MySql e para conectar usaria o driver para conectar ao inves do odbc

juliano,

eu naum usa o driver como vc disse … pois o meu prof so ensinou a usar o ODBC ( mau isso na verdade)… eu to no estagio… e me colocaram pra fazer isso ( sem nenhuma ajuda)…

muitissimo obrigado pela ajuda e desculpa pelas perguntas (bobas)…

J

ananda_8:
Eu importei…

Aff ta cheio d erro…

Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: Uncompilable source code at relatório.rela.jButton1ActionPerformed(rela.java:351) at relatório.rela.access$400(rela.java:24) at relatório.rela$5.actionPerformed(rela.java:243)

esse é um deles…

rsrsrs… estou vendo mesmo muitos erros. rsrs…
se voce quiser pode me enviar o seu projeto no meu e-mail assim eu corrijo ele pra você, porque com tantos erros fica difícil de ajudar sem olhar.

A

ok… qual é o seu e-mail???

F

bem ananda_8, se naum tiver o minimo de noção sobre java fica complicado…como disse, leia as apostilas FJ11 e FJ21 da Caelum.

mas vamus la, vou tentar te ajudar. Primeira coisa eh deixar de usar ODBC+Access, usa outro banco e evite ODBC.

//aqui faz a conexao.
public class Conexao{
    public static Connection getConnection() throws SQLException{
        try {
             Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");                             
             return DriverManager.getConnection("jdbc:odbc:seuarquivo.mdb"); //veja essa linha, vc precisa colocar a extensao do seu arquivo access
        } catch (ClassNotFoundException e) {
            JOptionPane.showMessageDialog(null, e.getMessage());            
            throw new SQLException();            
        }        
    }     
}

//aqui vc faz um Bean da sua classe, eu costumo seguir os padroes da tabela no banco
public class Clientes{
    private Long id;
    private String nome;
    private String sobreNome;

    //aqui os gets e os sets
}

//aqui o DAO para fazer transações com o banco Insert, Select, Update, Delete
public class ClientesDAO{
      private Connection con;
      ClientesDAO(){ //isso eh um construtor, aqui vc chama sua conexao
           this.con = Conexao.getConnection();
      }

      public void insere(Clientes cli){
           //metodo que insere informacoes no banco
           PreparedStatement stm = this.con.prepareStatement("INSERT INTO clientes (nome, sobreNome)  VALUES (?,?)");
           stm.setString(1, cli.getNome());
           stm.setString(2, cli.getSobreNome());
           stm.executeUpdate();
      }

     public List<Clientes> retornaClientes(){
         //metodo q consulta clientes
          List<Clientes> lista = new ArrayList();
          PreparedStatement stm = this.con.prepareStatement("SELECT * FROM clientes");
          ResultSet rs = stm.executeQuery();
          while(rs.next()){
                 Clientes cliente = new Clientes();
                 cliente.setId(rs.getLong("id"));
                 cliente.setNome(rs.getString("nome"));
                 cliente.setSobreNome(rs.getString("sobreNome"));
                 lista.add(cliente);
          }
          rs.close();
          stm.close();
          return lista; 
     }
}


//aqui eh onde vc insere e consulta, veja.
//inserindo
Clientes cli = new Clientes();
cli.setNome(nome.getText());
cli.setSobreNome(sobreNome.getText());

ClientesDAO cliDAO = new ClientesDAO();
cliDAO.insere(cli); //aqui onde vai inserir


//consultando resultado
ClientesDAO cliDAO = new ClientesDAO();
List<Clientes> cli = cliDAO.retornaClientes();
for(Clientes c : cli){
     System.out.println(cli.getId());
     System.out.println(cli.getNome());
     System.out.println(cli.getSobreNome());

     //se tudo estiver certo aqui vai exibir seus clientes
}

//mandando para o Jasper
public void imprimeRelatorioJasper() JRException, SQLException{
        String arquivo = "relatorios/RelatorioClientes.jasper";  
        java.io.InputStream file = getClass().getClassLoader().getResourceAsStream(arquivo);  
        List<Clientes> lista = new ClientesDAO().retornaClientes();  
        Map parametros = new HashMap();  
        parametros.put("id_cliente", codigo1); //aqui vc pode passar o parametro como quiser, desde q esteja definido o nome o jasper no caso "id_cliente".
        JRDataSource dados = new JRBeanCollectionDataSource(lista);  
        JasperPrint printer = JasperFillManager.fillReport(file, parametros, dados);  
        JRViewer view = new JRViewer(printer);  
        JDialog dialog = new JDialog();  
        dialog.getContentPane().add(view);  
        dialog.setVisible(true);   

}

Eh isso…No seu relatorio jasper coloque os nomes das colunas.
Estude sobre Pattern DAO, leia a apostila FJ11 e FJ21, não use ODBC e muito menos Access.

t+ e boa sorte.

A

poxa vida…

eu aprend o java atraves do meu prof d Java ( ele me ensinou assim)…
achu q é por isso…rsrsr

eu vo fazendo o meu projeto atraves da net(mas esse é meu estágio)… ai fica complicado…

eu to começando a fazer o BD no MySQL…

F

ananda_8:
poxa vida…

eu aprend o java atraves do meu prof d Java ( ele me ensinou assim)…
achu q é por isso…rsrsr

eu vo fazendo o meu projeto atraves da net(mas esse é meu estágio)… ai fica complicado…

eu to começando a fazer o BD no MySQL…

Segue o esquema q falei ai no post q tu consegue…na apostila FJ21 tem tudo o q falei aqui, estude !

Criado 5 de setembro de 2011
Ultima resposta 6 de set. de 2011
Respostas 22
Participantes 4