Ric*_*ari 14 sql jasper-reports parameter-passing
我正在尝试为我的应用程序编写查询,但我遇到了一些麻烦.我需要传递一个参数作为我的数据库的一个字段,如:
SELECT name, phone, email
FROM company
WHERE $P{clause} = $P{key}
ORDER BY $P{order}
Run Code Online (Sandbox Code Playgroud)
因为WHERE子句和ORDER BY子句是动态的,供用户选择.
使用$P{}它不起作用.
Ale*_*x K 26
JasperReports中有两个用于参数引用的语法表达式:$P{}和$P!{}.
例子:
| Parameter name | Parameter type | Parameter value | |:---------------|-------------------|:---------------:| | 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}
Run Code Online (Sandbox Code Playgroud)
结果将是:
SELECT startDate, endDate, rating FROM events WHERE name='Olympic Games' AND type=2
Run Code Online (Sandbox Code Playgroud)
例子:
| 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 $P!{tableName} WHERE name='$P!{eventName}' AND channel=$P!{channel} AND type=$P!{type}
Run Code Online (Sandbox Code Playgroud)
结果将是:
SELECT startDate, endDate, rating FROM events WHERE name='Olympic Games' AND channel='BBC' AND type=sport
Run Code Online (Sandbox Code Playgroud)
在你的情况下,正确的表达式可能是这样的:
SELECT name, phone, email FROM company WHERE $P!{clause} = $P{key} ORDER BY $P!{order}
Run Code Online (Sandbox Code Playgroud)
其中$ P {key}是java.lang.String参数
或者像这样(它取决于$ P!{clause}值)
SELECT name, phone, email FROM company WHERE $P!{clause} = $P!{key} ORDER BY $P!{order}
Run Code Online (Sandbox Code Playgroud)
其中$ P {key}是java.lang.String参数