首页 >数据库 >mysql教程 >如何在 JasperReports 查询中将参数传递给 WHERE 和 ORDER BY 子句?

如何在 JasperReports 查询中将参数传递给 WHERE 和 ORDER BY 子句?

DDD
DDD原创
2025-01-18 06:37:09683浏览

How to Pass Parameters to WHERE and ORDER BY Clauses in JasperReports Queries?

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn