java - DynamicReports的查询参数未找到错误
问题描述
我正在尝试使用 DynamicReports 库生成报告。数据源基于具有带参数的 where 子句的 SQL 查询。在下面的示例中,我设置了参数“orderNo=123456”。但是,当我运行查询时,出现如下异常。
DynamicReports 站点databasedatasourcereport中共享的示例没有带参数的 where 子句。请提出解决问题需要采取的措施。
例外:
Query parameter not found : orderNo
at net.sf.jasperreports.engine.design.JRAbstractCompiler.verifyDesign(JRAbstractCompiler.java:280) ~[jasperreports-6.8.0.jar:6.8.0-2ed8dfabb690ff337a5797129f2cd92902b0c87b]
at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:152) ~[jasperreports-6.8.0.jar:6.8.0-2ed8dfabb690ff337a5797129f2cd92902b0c87b]
at net.sf.jasperreports.engine.JasperCompileManager.compile(JasperCompileManager.java:358) ~[jasperreports-6.8.0.jar:6.8.0-2ed8dfabb690ff337a5797129f2cd92902b0c87b]
at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:618) ~[jasperreports-6.8.0.jar:6.8.0-2ed8dfabb690ff337a5797129f2cd92902b0c87b]
at net.sf.dynamicreports.jasper.builder.JasperReportBuilder.toJasperReport(JasperReportBuilder.java:291) ~[dynamicreports-core-5.1.0.jar:na]
源代码:
JasperReportBuilder jasperReportBuilder = report().columns(col.column("Order No", "orderNo", type.stringType()))
.columns(col.column("Order Amount", "orderAmount", type.bigDecimalType()))
.setQuery("select orderNo, orderAmount from orders where orderNo=$P{orderNo}",
QueryLanguage.SQL)
.setConnection(connection).setDefaultFont(stl.font(DEFAULT_FONT, false, false, 12))
.setParameter("orderNo", "123456")
.pageFooter(Components.pageXofY());
JasperPrint jp = jasperReportBuilder.toJasperPrint();
解决方案
解决方案非常简单——应该声明参数。
您只需要添加参数定义:
.addParameter("orderNo", String.class)
完整的代码将是:
JasperReportBuilder jasperReportBuilder = report()
.columns(col.column("Order No", "orderNo", type.stringType()),
col.column("Order Amount", "orderAmount", type.bigDecimalType()))
.setQuery("SELECT orderNo, orderAmount FROM orders WHERE orderNo=$P{orderNo}",
QueryLanguage.SQL)
.setConnection(connection).setDefaultFont(stl.font(DEFAULT_FONT, false, false, 12))
.addParameter("orderNo", String.class) // Parameter declaration (of String type)
.setParameter("orderNo", "123456")
.pageFooter(Components.pageXofY())
.show();
推荐阅读
- javascript - 在 React 中使用 for 循环对象时出现连线错误
- python - Wikipedia API 返回的 Python requests 库的解码标题
- java - 如何在 Java 中访问 HTTP 响应对象的值
- javascript - 如何过滤掉包含最多另一个数字的数字的div?
- elasticsearch - logstash 无法将类型完成解析为数字
- c - 链表 - Free() 节点导致程序崩溃
- c# - 创建基于内容缩放的 UWP 语音气泡控件
- python - 如何在python中导入文件?
- java - Spring Boot 中 @Scheduled 的动态配置
- python - 编写数据刮板的问题