[Ajuda] Gerar relatorio com subRelatorio atraves de uma classe java

3 respostas
V

Fala galera, estou com um problema em gerar um relatorio a partir de uma classe java.

Este relatorio possui um subRelatorio, e quando roda atraves do iReport, funciona sem problema, vo compilo o subReport com os parametros, executo o Report com os parametros e pronto, está la o pdf, porem agora estou desenvolvendo uma classe para pode fazer esse processo.

O código java é esse:

public static void gerarJasper(){
		Connection conn = null;
		try {
			conn = conexao();
			
			JasperDesign jasperDesignMaster = JRXmlLoader.load("C://relatorioMaster.jrxml");
			JasperReport jasperReportMaster = JasperCompileManager.compileReport(jasperDesignMaster);			
			JasperDesign jasperDesign = JRXmlLoader.load("C://relatorio.jrxml");
			JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
			
			JasperPrint jasperPrintMaster = JasperFillManager.fillReport(jasperReportMaster, parametrosMaster(),conn);
			
			JasperExportManager.exportReportToPdfFile(jasperPrintMaster, "C:\\RelatorioMaster.pdf");
			
		
		} catch (JRException e) {
			e.printStackTrace();
		} finally {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

Bom, passo a conexão, pois o report possui uma query, e passo os parametros a serem preenchidos, porem quando a linha

JasperPrint jasperPrintMaster = JasperFillManager.fillReport(jasperReportMaster, parametrosMaster(),conn);

é executada ocorre o seguinte erro:

net.sf.jasperreports.engine.JRException: Error preparing statement for executing the report query : 

[aqui é informada a query]


	at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createStatement(JRJdbcQueryExecuter.java:238)
	at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:129)
	at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:681)
	at net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:601)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1247)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:877)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:826)
	at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:59)
	at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:417)
	at LivroPsico.gerarJasper(LivroPsico.java:130)
	at LivroPsico.main(LivroPsico.java:40)
Caused by: java.sql.SQLException: Conexão Fechada
	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:269)
	at oracle.jdbc.driver.OracleConnection.privatePrepareStatement(OracleConnection.java:931)
	at oracle.jdbc.driver.OracleConnection.prepareStatement(OracleConnection.java:838)
	at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createStatement(JRJdbcQueryExecuter.java:168)
	... 10 more

Estou pesquisando no google, forum, tentando algumas soluções, e até agora nada.
A forma como o relatorioMaster pega o subRelatorio é atraves do caminho do arquivo.

Obrigado desde ja.
Abraços e fiquem com Deus.

3 Respostas

R

velhao, vc ta conseguindo conectar, vc ta com driver .jar do oracle no seu projeto.

furutani

Verifique se a query roda fora do ireport. Tente rodar com o sql*plus.

V

Galera muito obrigado.

Estava vendo o código é o problema foi q eu estava dando um close na conexão antes de usa-la, o restante estava tudo certo.

O problema ja foi resolvido

abraços.

Criado 21 de janeiro de 2010
Ultima resposta 22 de jan. de 2010
Respostas 3
Participantes 3