Bom dia
Eu tenho um pasta com vários relatorios .jasper e . jxrml e gostaria de abrir eles com uma classe java, to tentando usar esta mas ta dando o erro a seguir.
São 68 relatorios cada um com uma consulta diferente então gostaria de uma classe para somente abrir eles, eu passo o nome por paramentro e a classe abre o relatorio
se alguém puder analizar este codigo e ver onde to errando, nesse codigo eu estou tentando abrir o relatorio teste.jasper.
abraços e até mais.
[code]
package teste;
import net.sf.jasperreports.engine.;
import net.sf.jasperreports.view.;
import java.sql.;
import java.util.;
public class testando {
static Connection con;
public void conectar2() {
String userName = "audesp";
String password = "audesp";
String url = null;
url ="jdbc:postgresql://dti-dsis-602:5432/audesp";
try{
Class.forName("org.postgresql.Driver");
con = DriverManager.getConnection(url, userName, password);
}
catch (ClassNotFoundException e){
System.out.println(e);
}
catch (SQLException e) {
System.out.println(e);
}
System.out.println("Conectado2");
}
void Gera(){
ResultSet rs = null;
JRResultSetDataSource jrRS = new JRResultSetDataSource( rs );
Map parameters = new HashMap();
JasperPrint jprint=null;
try {
JasperPrint jasperPrint = JasperFillManager.fillReport(
"teste.jasper", new HashMap(), jrRS);
JasperViewer.viewReport(jasperPrint);
}
catch (JRException e) {
System.out.println(e);
}
JasperViewer.viewReport(jprint,false);
}
public static void main(String a[]){
new testando().conectar2();
new testando().Gera();
}
}
[/code]
APRENSENTA ESTE ERRO QUANDO TENTO ABRIR O RELATORIO*
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
at net.sf.jasperreports.engine.fill.JRBaseFiller.<clinit>(JRBaseFiller.java:250)
at net.sf.jasperreports.engine.fill.JRFiller.createFiller(JRFiller.java:113)
at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:83)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:428)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:344)
at teste.testando.Gera(testando.java:37)
at teste.testando.main(testando.java:49)
Exception in thread “main”
Cara, não entendi pq desse erro ai, mas ó só o meu método:
public void geraPdf( Relatorio rel, String path, HttpSession session ) throws Exception {
String layout = "", imagem = "";
final String pdf = path + "/WEB-INF/pdf/relatorio.pdf";
try {
String titulo = "", supervisor = "";
EstruturaHierarquica estrutura = new EstruturaHierarquica( ((String)MyHttpSession.getAttribute( session , "EstruturaHierarquica" )).trim() , ((String)MyHttpSession.getAttribute( session , "DataSourceID" )).trim() );
sql = "SELECT A.CHAPA FROM FUNCA A WHERE ( A.HIERARQUIA IN ( "+estrutura.gerarHierarquiaNivelAbaixo().trim()+" ) OR A.CHAPA='"+((String)MyHttpSession.getAttribute( session , "Supervisor" )).trim()+"' ) ORDER BY A.CHAPA DESC";
System.out.println(sql);
rset = db.executeQuery( sql );
if( rset.next() ) {
if( supervisor.equals(null) || supervisor == null || supervisor.equals("null") ) { supervisor = ""; }
else { supervisor = rset.getString("chapa").trim(); }
}
String prazo = rel.getPrazo_ano() + "-" +
rel.getPrazo_mes() + "-" + rel.getPrazo_dia();
Map parametros = new HashMap();
if( rel.getSeleciona().equals("empregado") ) {
layout = path + "/WEB-INF/jrxml/relatorioPorEmpregado.jrxml";
sql = "select trim(a.chapa)+'-'+trim(b.nome) as nome, b.empresa, " +
"trim(a.codcurso)+'-'+trim(c.titulo) as curso, " +
"trim(b.lotacao)+'-'+trim(d.descricao) as lotacao, a.prazo " +
"from neces a join funca b on (a.chapa = b.chapa) " +
"join tcurs c on (a.codCurso = c.codCurso) " +
"join tlotc d on (b.lotacao = d.cod) " +
"where a.chapa = '" + rel.getChapa() + "' and " +
"a.prazo <= '" + prazo + "' order by a.chapa";
System.out.println("sql '" + sql + "'");
rset = db.executeQuery( sql );
} else if( rel.getSeleciona().equals("curso") ) {
layout = path + "/WEB-INF/jrxml/relatorioPorCurso.jrxml";
sql = "select trim(a.chapa)+'-'+trim(b.nome) as nome, b.empresa, " +
"trim(a.codcurso)+'-'+trim(c.titulo) as curso, " +
"trim(b.lotacao)+'-'+trim(d.descricao) as lotacao, " +
"trim(b.cargo)+'-'+trim(e.titulo) as cargo, a.prazo " +
"from neces a join funca b on (a.chapa = b.chapa) " +
"join tcurs c on (a.codCurso = c.codCurso) " +
"join tlotc d on (b.lotacao = d.cod) " +
"join cargo e on (b.cargo = e.codigo) " +
"where a.prazo <= '" + prazo + "' and " +
"a.codCurso = '" + rel.getCodCurso() + "' order by a.chapa";
System.out.println("sql '" + sql + "'");
rset = db.executeQuery( sql );
}
// Compila o relatório
JasperReport relatorio = JasperCompileManager.compileReport( layout );
// executa o relatório
JasperPrint impressao = JasperFillManager.fillReport( relatorio, parametros, new JRResultSetDataSource(rset) );
// JasperPrint impressao = JasperFillManager.fillReport( getClass().getResourceAsStream(layout), parametros, new JRResultSetDataSource(rset) );
// exibe o resultado da impressão na previsualização padrão Swing
// JasperViewer viewer = new JasperViewer( impressao, true );
// viewer.show();
// gera um arquivo PDF com o resultado da execução do relatório
JasperExportManager.exportReportToPdfFile( impressao, pdf );
o problema é que tenho quase 70 relatorios com nomes diferentes e com consultas diferentes, então gostaria de um metodo pra chamar eles sem precisar de passar consulta, pois eles estao prontos, so quero abrir eles.
se puder me ajudar agradeço.
Abraços
Opa,
Ficou faltando a Lib do Commons Loggin da Apache.
:okok:
Valeu pela dica, vou procurar por ela.
tenho uma outra duvida, como eu tenho mais de 60 relatorios gostaria de saber se tem como fazer uma classe generica pra abrir os relatorios sem a query, pois se não vou ter que colocar 60 query no codigo.
Abraços e até mais. :lol: