- 我后端springboot里面集成了jasper报表,需要用id进行多条精确查询,那么sql中必须要用查询in关键字,但是经过查询资料发现,jasper报表不支持直接使用IN查询,需要用到以下函数:$X{IN, colName, paramName},如下:
- 此时id为字段名称,idList是参数名,idList的类型为java.util.List类型
- 但是预览时候会报错,提示参数类型不支持查询。
-
这时候非常困惑,查询官方资源表示,$X{IN,colName,paramsName}函数传入的参数类型应该是List类型,但是为什么预览时候却提示此类型不支持查询,网上搜寻答案无解。。。后偶然发现把sql中的${idList} is null 去除后,报错消除。修改如下:
-
此时可能会有疑问,如果去掉$P{idList} is null 去掉的话,那么不输入此参数,能否查询全部数据,以下是官方文档的回答
JasperReports 提供了一个特殊的语法,用于与 where 条件一起使用:IN 和 NOTIN 子句。IN 子句检查特定的值是否存在于一组离散的值中。下面是一个示例:
-
```sql
SELECT * FROM ORDERS WHERE SHIPCOUNTRY IN ('USA','Italy','Germany')
```
这里的集合由美国、意大利和德国组成。假设我们将国家集合作为列表(最好是 java.util.Collection)或数组传递,为了使之前的查询在国家集合动态地生效,语法应该如下:
```sql
SELECT * FROM ORDERS WHERE $X{IN, SHIPCOUNTRY, myCountries}
```
其中,myCountries 是包含国家名称集合的参数名称。$X{} 子句识别三个参数:
- 要应用的函数类型(IN 或 NOTIN)
- 要评估的字段名称(SHIPCOUNTRY)
- 参数名称(myCountries)JasperReports 处理每个值中的特殊字符。如果参数为 null 或包含空列表,表示未为参数设置任何值,则整个 $X{} 子句被评估为始终为真的语句“0 = 0”。
-
也就是不填入参数时候,$X{}函数会变成“0 = 0”,至此,问题解决!
Jaspersoft studio报错,Parameter type not supported in query : xxx class java.util.List,关于报表List报表传参问题
最新推荐文章于 2024-05-28 15:51:24 发布