JasperReports 查询参数传递
数据库查询中,根据用户输入动态传递参数是常见需求。使用 $P{}
语法传递参数时,一些用户可能会遇到问题。
JasperReports 提供两种语法来引用参数:$P{}
和 $P!{}
。
$P{paramName}
语法$P{paramName}
主要用于设置 WHERE 子句的输入参数值。此语法的替换算法类似于 java.sql.PreparedStatement
。它智能地处理不同参数类型:
java.lang.String
类型参数,引擎会将 $P{parameterName}
替换为带引号的值。java.lang.Integer
类型参数,引擎会将 $P{parameterName}
替换为数值。参数名称 | 参数类型 | 参数值 |
---|---|---|
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!{paramName}
语法$P!{paramName}
语法执行简单的替换,通常用于替换参数的精确值。
参数名称 | 参数类型 | 参数值 |
---|---|---|
tableName | java.lang.String | events |
eventName | java.lang.String | Olympic Games |
channel | java.lang.String | 'BBC' |
type | java.lang.String | sport |
原始表达式:
<code class="language-sql">SELECT startDate, endDate, rating FROM $P!{tableName} WHERE name='$P!{eventName}' AND channel=$P!{channel} AND type=$P!{type}</code>
结果:
<code class="language-sql">SELECT startDate, endDate, rating FROM events WHERE name='Olympic Games' AND channel='BBC' AND type=sport</code>
对于给定的查询,以下表达式可能适用:
$P{key}
是 java.lang.String
类型参数:<code class="language-sql">SELECT name, phone, email FROM company WHERE $P!{clause} = $P{key} ORDER BY $P!{order}</code>
$P{key}
是非字符串类型参数:<code class="language-sql">SELECT name, phone, email FROM company WHERE $P!{clause} = $P!{key} ORDER BY $P!{order}</code>
以上是如何使用 $P{} 和 $P!{} 语法正确地将参数传递给 JasperReports 查询?的详细内容。更多信息请关注PHP中文网其他相关文章!