JasperReports 7.0.3 Java调用报错:未注册plsql查询执行器工厂
解决JasperReports 7.0.3调用PLSQL报表报错问题
报错信息:
Failed to generate report: com.fasterxml.jackson.databind.JsonMappingException: No query executer factory registered for the "plsql" language.
at [Source: (ByteArrayInputStream); line: 16, column: 209] (through reference chain: net.sf.jasperreports.engine.design.JasperDesign["query"])
原因
Jasper Studio预览时默认集成了PLSQL查询执行器的支持,但Java项目中若依赖不全或未手动注册对应工厂类,就会触发该错误。
解决方案
1. 补全依赖
如果使用Maven,在pom.xml中添加PLSQL相关依赖:
<dependency> <groupId>net.sf.jasperreports</groupId> <artifactId>jasperreports</artifactId> <version>7.0.3</version> </dependency> <dependency> <groupId>net.sf.jasperreports</groupId> <artifactId>jasperreports-functions</artifactId> <version>7.0.3</version> </dependency> <!-- 若使用Oracle数据库,需添加对应JDBC驱动 --> <dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc8</artifactId> <version>19.3.0.0</version> </dependency>
2. 手动注册PLSQL查询执行器工厂
在Java代码生成报表前,注册对应的工厂类:
import net.sf.jasperreports.engine.JasperReportsContext; import net.sf.jasperreports.engine.query.PlSqlQueryExecuterFactory; import net.sf.jasperreports.engine.util.JRProperties; // 获取JasperReports上下文实例 JasperReportsContext jasperContext = JasperReportsContext.getInstance(); // 注册PLSQL查询执行器工厂 JRProperties.setProperty(jasperContext, PlSqlQueryExecuterFactory.PL_SQL_QUERY_EXECUTER_FACTORY_PREFIX + "plsql", PlSqlQueryExecuterFactory.class.getName());
3. 校验报表文件的查询语言配置
确认.jrxml文件中的查询语言设置为plsql且拼写无误:
<queryString language="plsql"> <!-- 你的PLSQL查询语句 --> </queryString>
内容的提问来源于stack exchange,提问作者Sindhu Malaiyandi
相关产品推荐
相关产品推荐

