我正在尝试为我的应用程序编写一个查询,但我遇到了一些问题。我需要将我的数据库中的一个字段作为参数传递,例如:
SELECT name, phone, email
FROM company
WHERE $P{clause} = $P{key}
ORDER BY $P{order}
由于用户可以选择 WHERE 子句和 ORDER BY 子句是动态的。
使用 $P{}
没有起作用。
我正在尝试为我的应用程序编写一个查询,但我遇到了一些问题。我需要将我的数据库中的一个字段作为参数传递,例如:
SELECT name, phone, email
FROM company
WHERE $P{clause} = $P{key}
ORDER BY $P{order}
由于用户可以选择 WHERE 子句和 ORDER BY 子句是动态的。
使用 $P{}
没有起作用。
在 JasperReports 中,有两种参数引用的语法表达式:$P{}
和 $P!{}
。
以下是示例:
| 参数名称 | 参数类型 | 参数值 | |:---------------|-------------------|:---------------:| | eventName | java.lang.String | Olympic Games | | eventType | java.lang.Integer | 2 |
原始表达式(需要替换):
SELECT startDate, endDate, rating FROM events WHERE name=$P{eventName} AND type=$P{eventType}
结果将会是:SELECT startDate, endDate, rating FROM events WHERE name='Olympic Games' AND type=2
示例:
| 参数名 | 参数类型 | 参数值 | |:-------|--------:|:------:| | tableName | java.lang.String | events | | eventName | java.lang.String | 奥运会 | | channel | java.lang.String | 'BBC' | | type | java.lang.String | sport |
原始表达式(待替换):
SELECT startDate, endDate, rating FROM $P!{tableName} WHERE name='$P!{eventName}' AND channel=$P!{channel} AND type=$P!{type}
结果将是:SELECT startDate, endDate, rating FROM events WHERE name='Olympic Games' AND channel='BBC' AND type=sport
如需更多信息,您可以阅读此 使用报告参数 文章,并查看此 查询示例。
在您的情况下,正确的表达可能是这样的:
SELECT name, phone, email FROM company WHERE $P!{clause} = $P{key} ORDER BY $P!{order}
其中$P{key}是一个java.lang.String参数
或者像这样(这取决于$P!{clause}的值)
SELECT name, phone, email FROM company WHERE $P!{clause} = $P!{key} ORDER BY $P!{order}
其中$P{key}是一个java.lang.String参数。
如果你需要按参数排序,请尝试这样做:
SELECT name, phone, email ,(case when $P{order} = 'name' then name when $P{order} = 'phone' then phone else email end) as orderlist
FROM company
WHERE $P{clause} = $P{key}
ORDER BY orderlist