获取“没有为'plsql'语言注册的查询执行器工厂” Java代码的例外 [英] Getting "No query executer factory registered for the 'plsql' language" Exception from Java code

查看:179
本文介绍了获取“没有为'plsql'语言注册的查询执行器工厂” Java代码的例外的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个简单的报告,显示数据库中的字段。我在Jasper中设置了一个数据适配器并放入了Query。我可以从Jasper成功预览报告,但是当谈到Java时,它无法编译报告并显示以下异常

I have a simple report that displays fields from database. I have setup a data adapter in Jasper and put the Query. I can preview the report successfully from Jasper, but when it comes to Java it couldn't compile the report and show the following exceptions


Jun 18,2014 3:17:49 PM org.apache.commons.digester.Digester endElement
严重:结束事件引发异常

Jun 18, 2014 3:17:49 PM org.apache.commons.digester.Digester endElement SEVERE: End event threw exception

引起:net.sf .jasperreports.engine.JRRuntimeException:没有为'plsql'语言注册的查询执行器工厂。

Caused by: net.sf.jasperreports.engine.JRRuntimeException: No query executer factory registered for the 'plsql' language.

java.lang.reflect.InvocationTargetException
Jun 18,2014 3 :17:49 PM me.jasper.print.StatementPrint generateReport
SEVERE:null

java.lang.reflect.InvocationTargetException Jun 18, 2014 3:17:49 PM me.jasper.print.StatementPrint generateReport SEVERE: null

net.sf.jasperreports.engine.JRException:org.xml.sax .SAXParseException; lineNumber:7; columnNumber:16;第7行的错误char 16:没有为'plsql'语言注册的查询执行器工厂。

net.sf.jasperreports.engine.JRException: org.xml.sax.SAXParseException; lineNumber: 7; columnNumber: 16; Error at line 7 char 16: No query executer factory registered for the 'plsql' language.

引起:org.xml.sax.SAXParseException; lineNumber:7; columnNumber:16;第7行的错误char 16:没有为'plsql'语言注册的查询执行器工厂。

Caused by: org.xml.sax.SAXParseException; lineNumber: 7; columnNumber: 16; Error at line 7 char 16: No query executer factory registered for the 'plsql' language.

这是我的Jasper报告查询设置

Here is my Jasper report query setting

<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);


推荐答案

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

You must specify the query executer factory because support for plsql is not included by default in JasperReports library. In iReport (at least in older versions), I believe this is setup for you by default. You can verify in the iReport GUI via:


  • 菜单工具 - >选项 - >查询执行者

  • 具体来说:

    • 语言= plsql,

    • 工厂类= com.jaspersoft.jrx.query.PlSqlQueryExecuterFactory

    • Fields Provider Class = com.jaspersoft.ireport.designer.data.fieldsproviders.SQLFieldsProvider

    • Menu Tools -> options -> Query Executers
    • Specifically:
      • Language = plsql,
      • Factory Class = com.jaspersoft.jrx.query.PlSqlQueryExecuterFactory
      • Fields Provider Class = com.jaspersoft.ireport.designer.data.fieldsproviders.SQLFieldsProvider

      要在Java中执行相同操作,您必须执行 之类的操作:

      To do the same in Java, you must do something 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");
      

      请注意,在最近的版本中,类名已更改。因此,您可能需要使用 QueryExecuterFactory ,而不是 JRQueryExecuterFactory 。 (如果这没有帮助,您应该指定您正在使用的JasperReports版本。)您还需要确保JasperReports扩展库位于类路径中。您可以在iReports lib目录中找到该jar。

      Note that the class names have changed in recent versions. So, instead of JRQueryExecuterFactory, you might need to use QueryExecuterFactory. (If this does not help, you should specify which version of JasperReports you are using.) You will also need to make sure that the JasperReports extension library is in your classpath. You can find that jar in your iReports lib directory.

      外部资源:

      • JRQueryExecuterFactory
      • How to execute Oracle Stored Procedures in Jasper Reports
      • No query executer factory registered for the 'plsql' language in JasperServer 5.1

      这篇关于获取“没有为'plsql'语言注册的查询执行器工厂” Java代码的例外的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆