Problemas com iReport e NetBeans

5 respostas
A

Olá Pessoal tudo bem!!

Estou usando o NetBeans 6.7.1 e o iReport 3.6.2 e na hora de compilar a classe java, me ocorre o seguinte erro:

Exception in thread "main" java.lang.NoClassDefFoundError: Lorg/apache/commons/logging/Log;
        at java.lang.Class.getDeclaredFields0(Native Method)
        at java.lang.Class.privateGetDeclaredFields(Class.java:2291)
        at java.lang.Class.getDeclaredField(Class.java:1880)
        at java.io.ObjectStreamClass.getDeclaredSUID(ObjectStreamClass.java:1610)
        at java.io.ObjectStreamClass.access$700(ObjectStreamClass.java:52)
        at java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:425)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:413)
        at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:310)
        at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:547)
        at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1583)
        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
        at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1667)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1323)
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
        at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:92)
        at net.sf.jasperreports.engine.JasperFillManager.fillReportToFile(JasperFillManager.java:443)
        at Relatorios.RelatorioCarro.geraRelatorio(RelatorioCarro.java:37)
        at Relatorios.RelatorioCarro.main(RelatorioCarro.java:52)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.Log
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
        ... 33 more
Java Result: 1

Esta é a minha classe java que gera o relatorio:

import BancoDeDados.CarroBD;
import BancoDeDados.ErroBD;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.view.JasperViewer;





public class RelatorioCarro {


    public void geraRelatorio(){

        try{
        CarroBD carBD = new CarroBD();
        
        JRResultSetDataSource jrRS = new JRResultSetDataSource(carBD.getResultSet("select * from carro"));
        Map parametros = new HashMap();
        
        JasperFillManager.fillReportToFile("D:\Relatorios\RelatorioCarro.jasper",parametros, jrRS);

        JasperExportManager.exportReportToPdfFile("RelatorioCarro.jrprint");
        JasperViewer.viewReport("RelatorioCarro.jasper",false);

        }catch(ErroBD e){
            JOptionPane.showMessageDialog(null,e.getMessage());
        }catch(JRException e){
            JOptionPane.showMessageDialog(null,e.getMessage());
        }

    }

    public static void main(String args[]){

        new RelatorioCarro().geraRelatorio();
    }
}

Esta é a classe que busca o ResultSet:

public ResultSet getResultSet(String sql)throws ErroBD{

            ResultSet resultado = null;
            criaConexao();
            PreparedStatement comando = null;
            Carro car = null;
            ListaCarro listacarro = null;


            try {
                    listacarro = new ListaCarro();

                    // criar o comando sql a ser realizado
                    comando = conexao.prepareStatement(sql);
                    //executar a consulta e obter as tuplas selecionadas
                    resultado = comando.executeQuery();
                    
                   resultado.close();
                   comando.close();
                   
                   return resultado;
            }
            catch(SQLException e){
                throw new ErroBD("erro ao realizar consulta");
            }
             finally{
                fechaConexao();
             }
        }

Caso alguem possa me ajudar ficarei grato!!!

5 Respostas

Marques

Opa,

Importe essa classe pro seu projeto
java.lang.NoClassDefFoundError: Lorg/apache/commons/logging/Log

A

Obrigado pela ajuda, mas agora ele esta enviando esta mensagem:

net.sf.jasperreports.engine.JRException: Unable to get next record.
        at net.sf.jasperreports.engine.JRResultSetDataSource.next(JRResultSetDataSource.java:99)
        at net.sf.jasperreports.engine.fill.JRFillDataset.advanceDataSource(JRFillDataset.java:845)
        at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:763)
        at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1402)
        at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:111)
        at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:888)
        at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:810)
        at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:89)
        at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:601)
        at net.sf.jasperreports.engine.JasperFillManager.fillReportToFile(JasperFillManager.java:492)
        at net.sf.jasperreports.engine.JasperFillManager.fillReportToFile(JasperFillManager.java:448)
        at Relatorios.RelatorioCarro.geraRelatorio(RelatorioCarro.java:21)
        at Relatorios.RelatorioCarro.main(RelatorioCarro.java:38)
Caused by: java.sql.SQLException: Operation not allowed after ResultSet closed
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)
        at com.mysql.jdbc.ResultSet.checkClosed(ResultSet.java:666)
        at com.mysql.jdbc.ResultSet.next(ResultSet.java:7274)
        at net.sf.jasperreports.engine.JRResultSetDataSource.next(JRResultSetDataSource.java:95)
        ... 12 more
CONSTRUÍDO COM SUCESSO (tempo total: 5 segundos)
A

Caso alguem possa me indicar um bom exemplo em vez de eu consertar o meu modelo, eu ficaria grato!!!

A

O que eu consegui melhorar no codigo foi isso:

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.ResultSet;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.view.JasperViewer;





public class RelatorioCarro {
/* Realza contornaniexão com o banco de dados, redo o objeto Connection */
     Connection conexao = null;
    
     public RelatorioCarro(){
        geraRelatorio();
     }

     public void geraRelatorio(){

        Connection conexao = null;
        ResultSet resultado = null;
		
            try {
                Class.forName("com.mysql.jdbc.Driver");
                // estabelecer a conexão

			// estabelecer a conexão

			try {
				conexao = (Connection)DriverManager.getConnection(
						"jdbc:mysql://localhost:3306/LocadoraVeiculos", "root",
						"xxxxxx");

				try {
					// criar um objeto de Statement para comandos sql
                                        String sql = "select * from carro";
					PreparedStatement comando = conexao.clientPrepareStatement(sql);
                                        resultado = (ResultSet) comando.executeQuery();

                                         JRResultSetDataSource jrRS = new JRResultSetDataSource(resultado);
                                         Map parametros = new HashMap();

                                         JasperFillManager.fillReportToFile("RelatorioCarro.jasper",parametros, jrRS);

                                         JasperExportManager.exportReportToPdfFile("RelatorioCarro.jrprint");
                                         JasperViewer.viewReport("RelatorioCarro.jasper",false);

                                         resultado.close();
                                         comando.close();

                                 }catch(JRException e){
                                     e.printStackTrace();
                                     JOptionPane.showMessageDialog(null,"JRException"+e.getMessage());
                                 }catch(SQLException e) {
					System.out.println("erro no sql");
					e.printStackTrace();
				 }
			} catch (SQLException e) {
				System.out.println("Erro no estabelecimento da conexão");
				e.printStackTrace();
			}
                        finally {
                            conexao.close();
			}
		} catch (ClassNotFoundException ex) {
                    Logger.getLogger(RelatorioCarro.class.getName()).log(Level.SEVERE, null, ex);
                }catch(SQLException e){
                    e.printStackTrace();
                }
     }

    public static void main(String args[]){

         new RelatorioCarro();
     }
}

Mas esta dando o seguinte erro:

net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: RelatorioCarro.jrprint
        at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:79)
        at net.sf.jasperreports.engine.JasperExportManager.exportReportToPdfFile(JasperExportManager.java:77)
        at Relatorios.RelatorioCarro.geraRelatorio(RelatorioCarro.java:58)
        at Relatorios.RelatorioCarro.<init>(RelatorioCarro.java:28)
        at Relatorios.RelatorioCarro.main(RelatorioCarro.java:87)
Caused by: java.io.FileNotFoundException: RelatorioCarro.jrprint
        ... 5 more
CONSTRUÍDO COM SUCESSO (tempo total: 5 segundos)

Caso alguem possa me ajudar ficarei grato!!

A

Consegui tirar o erro mas os dados do Banco não aparecem, só aparecem os campos estaticos do Relatorio. O estranho é que no iReport
quando clico no preview os dados do Banco aparecem normalmente.

Este é o codigo:

package Relatorios;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.ResultSet;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;





public class RelatorioCarro {
/* Realza contornaniexão com o banco de dados, redo o objeto Connection */
     Connection conexao = null;
     
    
     public RelatorioCarro(){
        geraRelatorio();
     }

     public void geraRelatorio(){

        Connection conexao = null;
        ResultSet resultado = null;
        //nome do seu relatorio gerado no ireport

		
            try {
                Class.forName("com.mysql.jdbc.Driver");
                // estabelecer a conexão

			// estabelecer a conexão

			try {
				conexao = (Connection)DriverManager.getConnection(
						"jdbc:mysql://localhost:3306/Locadoraveiculos", "root",
						"******");

				try {
                                        
                                        

					// criar um objeto de Statement para comandos sql
                                        String sql = "select * from carro";
					PreparedStatement comando = conexao.clientPrepareStatement(sql);
                                        resultado = (ResultSet) comando.executeQuery();

                                         JRResultSetDataSource jrRS = new JRResultSetDataSource(resultado);
                                         Map parametros = new HashMap();

                                         JasperPrint jasperPrint = JasperFillManager.fillReport("RelatorioCarro.jasper",new HashMap(),jrRS);
                                         JasperViewer.viewReport(jasperPrint,false);
                                         resultado.close();
                                         comando.close();

                                 }catch(JRException e){
                                     e.printStackTrace();
                                     JOptionPane.showMessageDialog(null,"JRException"+e.getMessage());
                                 }catch(SQLException e) {
					System.out.println("erro no sql");
					e.printStackTrace();
				 }
			} catch (SQLException e) {
				System.out.println("Erro no estabelecimento da conexão");
				e.printStackTrace();
			}
                        finally {
                            conexao.close();
			}
		} catch (ClassNotFoundException ex) {
                    Logger.getLogger(RelatorioCarro.class.getName()).log(Level.SEVERE, null, ex);
                }catch(SQLException e){
                    e.printStackTrace();
                }
     }

    public static void main(String args[]){

         new RelatorioCarro();
     }
}

Caso alguem possa me ajudar ficarei grato!!

Criado 13 de fevereiro de 2010
Ultima resposta 13 de fev. de 2010
Respostas 5
Participantes 2