我有一个简单的报告,显示数据库中的字段。我在Jasper中设置了一个数据适配器并放置了Query。我可以从Jasper成功预览报告,但是当谈到Java时,它无法编译报告并显示以下异常
2014年6月18日下午3:17:49 org.apache.commons.digester.Digester endElement 严重:结束事件引发异常
引起:net.sf.jasperreports.engine.JRRuntimeException:没有为' plsql'注册的查询执行器工厂语言。
java.lang.reflect.InvocationTargetException 2014年6月18日下午3:17:49 me.jasper.print.StatementPrint generateReport 严重:空
net.sf.jasperreports.engine.JRException:org.xml.sax.SAXParseException; lineNumber:7; columnNumber:16;第7行的错误char 16:没有为' plsql'注册的查询执行器工厂语言。
引起:org.xml.sax.SAXParseException; lineNumber:7; columnNumber:16;第7行的错误char 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);
答案 0 :(得分:2)
您必须指定查询执行程序工厂,因为JasperReports库中默认不包含对plsql的支持。在iReport中(至少在旧版本中),我相信默认情况下会为您设置。您可以通过以下方式在iReport GUI中进行验证:
要在Java中执行相同的操作,您必须执行某些之类的操作:
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。
外部资源: