首页 > 数据库 > mysql教程 > 如何使用 $P{} 和 $P!{} 语法正确地将参数传递给 JasperReports 查询?

如何使用 $P{} 和 $P!{} 语法正确地将参数传递给 JasperReports 查询?

DDD
发布: 2025-01-18 06:31:08
原创
643 人浏览过

How to Properly Pass Parameters to JasperReports Queries Using $P{} and $P!{} Syntax?

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板