我正在尝试为我的应用程序编写查询,但是我遇到了一些麻烦。我需要将数据库中的一个字段作为参数传递,例如:
SELECT name, phone, email
FROM company
WHERE $P{clause} = $P{key}
ORDER BY $P{order}
因为WHERE子句和ORDER BY子句是动态的,供用户选择。
使用$P{}
它无效。
答案 0 :(得分:26)
JasperReports 中有两个参数引用语法表达式: $P{}
和 {{1 }} 强>
样本:
| Parameter name | Parameter type | Parameter value | |:---------------|-------------------|:---------------:| | eventName | java.lang.String | Olympic Games | | eventType | java.lang.Integer | 2 |
原始表达(替换):
$P!{}
结果将是:
SELECT startDate, endDate, rating FROM events WHERE name=$P{eventName} AND type=$P{eventType}
样本:
| Parameter name | Parameter type | Parameter value | |:---------------|------------------:|:---------------:| | tableName | java.lang.String | events | | eventName | java.lang.String | Olympic Games | | channel | java.lang.String | 'BBC' | | type | java.lang.String | sport |
原始表达(替换):
SELECT startDate, endDate, rating FROM events WHERE name='Olympic Games' AND type=2
结果将是:
SELECT startDate, endDate, rating FROM $P!{tableName} WHERE name='$P!{eventName}' AND channel=$P!{channel} AND type=$P!{type}
有关详细信息,您可以阅读此Using report parameters帖子并查看此Query sample。
在你的情况下,正确的表达式可能是这样的:
SELECT startDate, endDate, rating FROM events WHERE name='Olympic Games' AND channel='BBC' AND type=sport
其中 $ 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 参数
答案 1 :(得分:-1)
如果您需要按参数订购,请尝试以下方法:
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