Вопрос по jasper-reports, parameter-passing, sql – Как передать параметры на запрос?

13

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

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

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

С помощью$P{} это не сработало.

Ваш Ответ

2   ответа
25

JasperReports: $P{} а также$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.

Пример:

| 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} syntax is using mostly for doing the "simple" replace.

Пример:

| 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

For more information Вы можете прочитать этоИспользование параметров отчета напишите и посмотрите на этоОбразец запроса.

В вашем случае правильное выражение может быть таким:

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 параметр

-1

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

Похожие вопросы