获取"没有查询执行者工厂注册了' plsql'语言" Java代码的例外

时间:2014-06-18 12:39:16

标签: java plsql jasper-reports

我有一个简单的报告,显示数据库中的字段。我在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);

1 个答案:

答案 0 :(得分:2)

您必须指定查询执行程序工厂,因为JasperReports库中默认不包含对plsql的支持。在iReport中(至少在旧版本中),我相信默认情况下会为您设置。您可以通过以下方式在iReport GUI中进行验证:

  • 菜单工具 - &gt;选项 - &gt;查询执行者
  • 具体做法是:
    • 语言= plsql,
    • Factory Class = com.jaspersoft.jrx.query.PlSqlQueryExecuterFactory
    • Fields Provider Class = com.jaspersoft.ireport.designer.data.fieldsproviders.SQLFieldsProvider

要在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。

外部资源: