在 JasperReports 中构建查询时,您可能需要从用户处传递动态参数。为此,有两种参数引用的语法表达式:$P{}
和 $P!{}
。
$P{}
语法$P{}
语法主要用于在 WHERE 子句中设置输入参数值。它采用类似于 java.sql.PreparedStatement
的“智能”替换算法。例如,java.lang.String
参数将被替换为带引号的值,而 java.lang.Integer
参数将被替换为数值。
例如,考虑以下参数:
参数名称 | 参数类型 | 参数值 |
---|---|---|
eventName | java.lang.String | Olympic Games |
eventType | java.lang.Integer | 2 |
原始表达式(待替换):
<code class="language-sql">SELECT startDate, endDate, rating FROM events WHERE name=$P{eventName} AND type=$P{eventType}</code>
结果将是:
<code class="language-sql">SELECT startDate, endDate, rating FROM events WHERE name='Olympic Games' AND type=2</code>
$P!{}
语法$P!{}
语法主要用于简单的替换。它对参数值进行逐字替换,没有任何特殊处理。
例如,考虑以下参数:
参数名称 | 参数类型 | 参数值 |
---|---|---|
tableName | java.lang.String | events |
eventName | java.lang.String | Olympic Games |
原始表达式(待替换):
<code class="language-sql">SELECT startDate, endDate, rating FROM $P!{tableName} WHERE name='$P!{eventName}'</code>
结果将是:
<code class="language-sql">SELECT startDate, endDate, rating FROM events WHERE name='Olympic Games'</code>
根据您的问题,您需要动态设置 WHERE 和 ORDER BY 子句,您可以使用以下表达式:
<code class="language-sql">SELECT name, phone, email FROM company WHERE $P!{clause} = $P{key} ORDER BY $P!{order}</code>
其中 $P{key}
是一个 java.lang.String
参数。如果 $P!{clause}
值需要带引号的值,您可以改用以下表达式:
<code class="language-sql">SELECT name, phone, email FROM company WHERE $P!{clause} = '$P!{key}' ORDER BY $P!{order}</code>
以上是如何在 JasperReports 查询中将参数传递给 WHERE 和 ORDER BY 子句?的详细内容。更多信息请关注PHP中文网其他相关文章!