gpt4 book ai didi

java - 如何操作 jrxml 模板中指定的 SQL

转载 作者:行者123 更新时间:2023-12-01 15:10:50 26 4
gpt4 key购买 nike

问题:报告模板由管理员用户创建,他们仅决定在何处显示哪些数据,因为数据过滤器由业务用户指定。用更简单的 SQL 术语来说,查询由管理员用户指定,业务用户指定 WHERE 子句。

Jasper 允许用户在 SQL 查询中指定参数,例如 $P{city}。我尝试使用 link 中指定的方法动态检索查询.

可能的解决方案是

  1. 在 JRXML 中使用 WHERE 子句参数并在创建报告时替换它们 - 这将节省 SQL 解析,但我不想指导管理员用户处理这种复杂性。解析并不是一个大问题。
  2. 使用我的自定义 jdbc 查询执行器和工厂,创建它只是为了允许我在 jasper 触发 SQL 查询之前使用扩展点。我将完全依赖 vanilla Jasper JDBC 数据源,但只会在执行前修改查询。 JRAbstractQueryExecuter 简化了查询,并在触发查询之前替换了 jasper 相关标记 - 这将非常脏,并且将迫使我特定于实现。
  3. 执行与我的应用程序代码库中的 JRAbstractQueryExecuter 中相同的替换,解析 SQL 查询,修改它并按照 link 中的指定再次设置它。

您能建议一个更好的方法吗?我有一种感觉,这绝对可以以更干净的方式完成。

感谢您的帮助

最佳答案

您可以创建一个输入控件来确定所需的 WHERE 子句并使用参数来保存该 WHERE 子句的内容。默认值表达式类似于:

 $P{theParameter} == "value_1" ?
(" AND CONDITION_1 IN ('A', 'B', 'C') AND CONDITION_2 = 'Yes' "
) : " AND CONDITION_3 = 'Other' AND CONDITION_4 = 'No' "

然后在 WHERE 子句中您可以像这样引用它:

 WHERE
.... = .....
AND .... = ....
AND .... = ....
$P!{theParameter}

如果 WHERE 子句中的约束列相同,则可以使用 $P!从字面上引入参数值,并在查询中引用它:

 WHERE
.... = .....
AND .... = ....
AND .... = ....
AND thisValue = $P!{theParameter}

关于java - 如何操作 jrxml 模板中指定的 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12389174/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com