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.