【问题标题】:Bind report parameter to a sql output jasper report将报告参数绑定到 sql 输出 jasper 报告
【发布时间】:2015-12-02 23:04:25
【问题描述】:

我有一份现有报告需要稍作修改。假设我的报告查询就像

select name,currency,productcode from  where name=?

现在这个'?'值将来自一个报告参数,比如 countryName。这可以使用参数化查询来完成,这不是问题。 现在我需要的是这个参数 countryName 从下面的另一个查询中获取数据

select name from countries

简而言之,我想将报告参数 countryName 的值绑定到上述查询的输出,并且我想将此查询放入自己的报告中。 使用 birt 很容易,但我想知道 jasper 是否可行?

P.S 我是 jasper 报告的新手。

我试图给出一个小场景来代表我的问题。实际的报告远不止于此,而且非常复杂。 任何帮助将不胜感激!

【问题讨论】:

  • 要使参数化查询起作用,您将在 java 中从国家/地区执行选择名称,将名称作为参数传递(在哈希图中),然后在 jasper 报告中执行其他查询...的 ?您将拥有参数名称 $P{TheParam}
  • @AlexK 参数化查询我可以运行,这不是问题。问题是如何将报表参数 countryName 与另一个 sql 的输出绑定
  • 如果您遇到特定问题,您需要给我们一些代码(jrxml 和 java),某些问题不起作用。像这样问题很可能被关闭(建议找教程)
  • @PetterFriberg 在组织中我们有执行报告的报告引擎模块,对于这个特定问题,我不确定我是否可以更改它。所以我正在寻找一些可以由报告本身解决的解决方案(如果可能的话)

标签: jasper-reports


【解决方案1】:

我给你一个答案,如何在不通过参数映射传递 anything 的情况下实现这一点(即使我认为参数映射应该是首选方式,修改你的标准模块以支持参数映射)

您说您将拥有带有国家名称的组合框值,我们需要将其设为静态。 (或者有一个静态的方式来访问它,“只能有一个”)

界面的示例类:

package com.your.package;

public class SelectCountryInterface {

  private static JComboBox<String> selectCountry;

  public static synchronized String getSelectedCountry(){
    Object value = selectCountry.getSelectedItem();
    if (value instanceof String){
        return (String)value;
    }
    return "";
  }

  //...Here goes you code to instance and populate the combobox
}

碧玉报告 (.jrxml)

  1. 定义一个参数并将defaultValueExpression 设置为指向您在类中的静态方法,这样它将使用您从接口类提供的值进行初始化。

    <parameter name="country" class="java.lang.String" isForPrompting="false">
      <defaultValueExpression><![CDATA[com.your.package.SelectCountryInterface.getSelectedCountry()]]> </defaultValueExpression>
    </parameter>
    
  2. 设置queryString 以使用您的参数

    <queryString>
       <![CDATA[select name,currency,productcode from  where name=$P{country}]]>
    </queryString>
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    相关资源
    最近更新 更多