Подтвердить что ты не робот

Как передать параметры в запрос?

Я пытаюсь написать запрос для своего приложения, но у меня возникают некоторые проблемы. Мне нужно передать в качестве параметра одно поле моей базы данных, например:

SELECT name, phone, email 
FROM company 
WHERE $P{clause} = $P{key}
ORDER BY $P{order}

Поскольку предложение WHERE и предложение ORDER BY являются динамическими для выбора пользователем.

Используя $P{}, это не сработало.

4b9b3361

Ответ 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

Ответ 2

если вам нужно заказать по параметру, попробуйте следующее:

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