gpt4 book ai didi

java - 从 Java 代码中获取 "No query executer factory registered for the ' plsql' 语言“异常

转载 作者:行者123 更新时间:2023-12-02 05:43:50 24 4
gpt4 key购买 nike

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

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

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

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.

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 报告查询设置

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

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

外部资源:

关于java - 从 Java 代码中获取 "No query executer factory registered for the ' plsql' 语言“异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24285844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com