JasperReports中有两种参数引用语法表达式:$P{}和$P!{} em>。
-
$P{paramName} 语法 主要用于设置WHERE 输入参数值。替换算法很“智能”,它的实现使用java.sql.PreparedStatement:对于java.lang.String 参数,引擎将替换$P{parameterName } 带引号的值,对于 java.lang.Integer - 带数值等等。
样本:
|参数名称 |参数类型 |参数值 |
|:---------------|-------|:------------ ----:|
|事件名称 | java.lang.String |奥运会 |
|事件类型 | 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
-
$P!{paramName} 语法 主要用于“简单”替换。
样本:
|参数名称 |参数类型 |参数值 |
|:---------------|------------------:|:------------ ----:|
|表名 | java.lang.String |活动 |
|事件名称 | java.lang.String |奥运会 |
|频道 | java.lang.String | '英国广播公司' |
|类型 | java.lang.String |运动 |
原始表达式(替换):
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
有关更多信息,您可以阅读此Using report parameters 帖子并查看此Query sample。
在你的情况下,正确的表达方式可能是这样的:
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 参数