There are two syntax expressions for parameter referencing in JasperReports: $P{}
and $P!{}
.
- $P{paramName} syntax is using mostly for setting WHERE input parameters values. The replacement algorithm is “smart”, its implementation uses java.sql.PreparedStatement: for java.lang.String parameter the engine will replace $P{parameterName} with quoted value, for java.lang.Integer – with numeric value and so on.
The sample:
| Parameter name | Parameter type | Parameter value | |:---------------|-------------------|:---------------:| | eventName | java.lang.String | Olympic Games | | eventType | java.lang.Integer | 2 |
Original expression (to replace):
SELECT startDate, endDate, rating FROM events WHERE name=$P{eventName} AND type=$P{eventType}
The result will be:
SELECT startDate, endDate, rating FROM events WHERE name="Olympic Games" AND type=2
- $P!{paramName} syntax is using mostly for doing the “simple” replace.
The sample:
| 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 |
Original expression (to replace):
SELECT startDate, endDate, rating FROM $P!{tableName} WHERE name="$P!{eventName}" AND channel=$P!{channel} AND type=$P!{type}
The result will be:
SELECT startDate, endDate, rating FROM events WHERE name="Olympic Games" AND channel="BBC" AND type=sport
For more information you can read this Using report parameters post and look at this Query sample.
In your case the right expression may be like this:
SELECT name, phone, email FROM company WHERE $P!{clause} = $P{key} ORDER BY $P!{order}
where $P{key} is a java.lang.String parameter
or like this (it depends on $P!{clause} value)
SELECT name, phone, email FROM company WHERE $P!{clause} = $P!{key} ORDER BY $P!{order}
where $P{key} is a java.lang.String parameter