我有一个简单的报告,显示数据库中的字段。我在 Jasper 中设置了一个数据适配器并放置了查询。我可以从 Jasper 成功预览报告,但是当涉及到 Java 时,它无法编译报告并显示以下异常
2014 年 6 月 18 日下午 3:17:49 org.apache.commons.digester.Digester endElement
严重:结束事件引发异常
引起原因:net.sf.jasperreports.engine.JRRuntimeException:没有为“plsql”语言注册查询执行器工厂。
java.lang.reflect.InitationTargetException
2014 年 6 月 18 日 3:17:49 PM me.jasper.print.StatementPrint 生成报告
严重:空
net.sf.jasperreports.engine.JRException: org.xml.sax.SAXParseException;行号:7;列数:16;第 7 行字符 16 处出错:没有为“plsql”语言注册查询执行器工厂。
引起的:org.xml.sax.SAXParseException;行号:7;列数:16;第 7 行字符 16 处出错:没有为“plsql”语言注册查询执行器工厂。
这是我的 Jasper 报告查询设置
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="testDataAdapter"/>
<queryString language="plsql">
<![CDATA[CALL getStatementDetails(250001 , "2012-01-01" , "2015-01-01" , 0 , 0)]]>
</queryString>
这是我的Java代码
JasperDesign jasperDesign = JRXmlLoader.load(new File("/home/mint/JaspersoftWorkspace/MyReports/ar/plsql.jrxml"));
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
JasperPrint print = JasperFillManager.fillReport(jasperReport, new HashMap<>());
JasperViewer jasperViewer = new JasperViewer(print, false);
jasperViewer.setVisible(true);
您必须指定查询执行器工厂,因为 JasperReports 库默认不包含对 plsql 的支持。在 iReport 中(至少在旧版本中),我相信这是默认设置的。您可以通过以下方式在 iReport GUI 中进行验证:
- 菜单工具 -> 选项 -> 查询执行器
- Specifically:
- 语言 = plsql,
- 工厂类 = com.jaspersoft.jrx.query.PlSqlQueryExecuterFactory
- 字段提供程序类 = com.jaspersoft.ireport.designer.data.fieldsproviders.SQLFieldsProvider
要在 Java 中执行相同的操作,您必须执行以下操作某物 like:
jasperReport.setProperty( "net.sf.jasperreports.query.executer.factory.plsql"
,"com.jaspersoft.jrx.query.PlSqlQueryExecuterFactory");
//Maybe this too, but not positive
JRProperties.setProperty( JRQueryExecuterFactory.QUERY_EXECUTER_FACTORY_PREFIX+"plsql"
,"com.jaspersoft.jrx.query.PlSqlQueryExecuterFactory");
请注意,最近版本中的类名称已更改。所以,而不是JRQueryExecuterFactory
,你可能需要使用QueryExecuterFactory
。 (如果这没有帮助,您应该指定您正在使用的 JasperReports 版本。)您还需要确保 JasperReports 扩展库位于您的类路径中。您可以在 iReports lib 目录中找到该 jar。
外部资源:
- JRQueryExecutorFactory http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/query/JRQueryExecuterFactory.html
- 如何在 Jasper Reports 中执行 Oracle 存储过程 http://community.jaspersoft.com/wiki/how-execute-oracle-stored-procedure-jasper-report-web-application-environment
- JasperServer 5.1 中没有为“plsql”语言注册查询执行器工厂 http://community.jaspersoft.com/wiki/no-query-executer-factory-registered-plsql-language-jasperserver-51
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)