如何传递参数进行查询?

时间:2012-08-08 18:41:57

标签: sql jasper-reports parameter-passing

我正在尝试为我的应用程序编写查询,但是我遇到了一些麻烦。我需要将数据库中的一个字段作为参数传递,例如:

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

因为WHERE子句和ORDER BY子句是动态的,供用户选择。

使用$P{}它无效。

2 个答案:

答案 0 :(得分:26)

JasperReports 中有两个参数引用语法表达式: $P{} {{1 }}

  • $ 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         |

原始表达(替换):

$P!{}

结果将是:

SELECT startDate, endDate, rating FROM events WHERE name=$P{eventName} AND type=$P{eventType} 
  • $ 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 events WHERE name='Olympic Games' AND type=2 

结果将是:

SELECT startDate, endDate, rating FROM $P!{tableName} WHERE name='$P!{eventName}' AND channel=$P!{channel} AND type=$P!{type} 

有关详细信息,您可以阅读此Using report parameters帖子并查看此Query sample


在你的情况下,正确的表达式可能是这样的:

SELECT startDate, endDate, rating FROM events WHERE name='Olympic Games' AND channel='BBC' AND type=sport

其中 $ 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 :(得分:-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