Ответ 1
В JasperReports имеется два синтаксических выражения для ссылки на параметры: $P{}
и $P!{}
.
- $P {paramName} синтаксис используется в основном для установки значений входных параметров WHERE. Алгоритм замены "умный", его реализация использует java.sql.PreparedStatement: для параметра java.lang.String двигатель заменит $P {parameterName} на кавычки, для java.lang.Integer - с числовым значением и т.д.
Образец:
| 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}
Результат будет:
SELECT startDate, endDate, rating FROM events WHERE name='Olympic Games' AND type=2
- $P! {paramName} синтаксис используется в основном для "простой" замены.
Образец:
| 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}
Результат будет:
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 {ключ} - это параметр java.lang.String
или как это (это зависит от значения $P! {clause})
SELECT name, phone, email FROM company WHERE $P!{clause} = $P!{key} ORDER BY $P!{order}
где $P {ключ} - это параметр java.lang.String