当前位置: 首页 > 面试题库 >

从Java代码获取“没有为'plsql'语言注册工厂查询执行器”异常

姚煜
2023-03-14
问题内容

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

2014年6月18日,下午3:17:49 org.apache.commons.digester.Digester endElement
SEVERE:结束事件引发异常

原因:net.sf.jasperreports.engine.JRRuntimeException:没有为’plsql’语言注册的查询执行程序工厂。

java.lang.reflect.InvocationTargetException 2014年6月18日,下午3:17:49
me.jasper.print.StatementPrint generateReport严重:null

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

问题答案:

您必须指定查询执行器工厂,因为JasperReports库中默认不包括对plsql的支持。在iReport中(至少在较早的版本中),我认为默认情况下已为您设置了此设置。您可以通过以下方式在iReport
GUI中进行验证:

  • 菜单工具->选项->查询执行器
  • 特别:
    • 语言= plsql,
    • 工厂类= com.jaspersoft.jrx.query.PlSqlQueryExecuterFactory
    • 字段提供者类= 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。

外部资源:

  • JRQueryExecuterFactory
  • 如何在Jasper报表中执行Oracle存储过程
  • 在JasperServer 5.1中没有为’plsql’语言注册的查询执行程序工厂


 类似资料:
  • 我有一个查询,我需要过滤出结果。 这是我的查询 我得到一个错误,说注册[query]。我显然有一个筛选字段的查询。我遵循elasticsearch页面上筛选的查询文档中给出的格式。https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html

  • 问题内容: 我有一个查询,我需要过滤出结果。 这是我的查询 我说错了。我显然对过滤字段有一个查询。我遵循的是Elasticsearch页面上经过过滤的查询文档中给出的格式。 https://www.elastic.co/guide/zh-CN/elasticsearch/reference/current/query-dsl- filtered- query.html 问题答案: 该查询已在ES

  • 问题内容: 我有一个语言代码列表(如“ en”,“ es” …),我需要用以下语言显示: 是否有任何内置API可以在Android中获取这些文件,还是我应该自己映射它们? 问题答案: 该班有一个方法,这个:作为文档说: 返回此语言环境的语言名称,本地化为 。确切的输出形式取决于此语言环境是否对应于特定的语言,脚本,国家/地区和变体。 因此,您可以像这样获得语言环境的语言名称:

  • 我试图从弹性搜索获取记录,我得到这个错误如下 我的Java代码如下 请让我知道,如果我错过了一些东西,而试图索引,我是新的弹性搜索。 同样,如果我想在我的查询中包括一个以上的条件,如下面所示 下面是上述查询的结果,它工作正常 我如何与上面的geoboundingbox查询相结合?我需要将其添加为过滤器吗? 更新:依赖关系 提前谢谢Rakesh

  • 有人能帮我解决这个问题吗?我收到一个错误返回:“没有为[注册查询或]”我是否结构错误?它应该过滤区域为530且开始为空白或区域为530且开始为“06192013”的所有结果,然后在此基础上使用其他过滤器提升文档。

  • 问题内容: 我正在尝试构建工厂对象,但是很难找到一种用Java实现它的好方法。 我正在编写的应用程序用于处理各种格式的文件,因此有一个CodecInterface,适用于用于读写文件的所有类。假设它定义了以下方法。这些文件中的每一个都有一个唯一的人工指定的ID字符串,用于对编码器\解码器进行ID识别。 工厂类将具有用于创建这些编解码器类实例的create方法。我想方法签名看起来像这样。 文件名是要