【问题标题】:Dynamic querystring in JRXML [closed]JRXML 中的动态查询字符串 [关闭]
【发布时间】:2009-03-16 23:10:24
【问题描述】:

我正在尝试构建一个足够智能的报告,可以根据某种输入参数稍微修改其 sql 查询。

例如,如果那个特殊的修改参数值为“1”,它会在 select 中添加一个字段,并在查询中添加一个 group by 子句。

我研究了 java 表达式,但 jrxml 的 queryString 标记似乎不支持它们。还尝试创建一个包含 java 表达式的变量并在 queryString 标记中使用该变量......这也不起作用!

现在我在想可能有一个包含所有逻辑的存储过程,只是让 jrxml 使用修改输入参数调用该存储过程,但我正在处理的项目似乎没有一个完整的很多存储过程,所以我想看看在我走这条路之前是否还有其他解决方案。

感谢您的帮助。


谢谢大家的帮助,非常感谢。但是我找到了另一种方法,并将其发布以供参考:here

【问题讨论】:

    标签: dynamic jasper-reports query-string report


    【解决方案1】:

    JasperDesign 实际上允许您修改 jrxml 文档的某些部分。因此,假设您有一个“报告”包,您可以在其中存储手动或通过 iReport 之类的工具构建的报告。只要您的查询是在标签<queryString> 中定义的,以下内容就可以让您随时更改查询:

    try {
        String fileName = getClass().getClassLoader().getResource("com/foo/myproject/reports/TestReport.jrxml").getFile();
        File theFile = new File(fileName);
        JasperDesign jasperDesign = JRXmlLoader.load(theFile);
    
        //Build a new query
        String theQuery = "SLECT * FROM myTable WHERE ...";
    
        // update the data query
        JRDesignQuery newQuery = new JRDesignQuery();
        newQuery.setText(theQuery);
        jasperDesign.setQuery(newQuery);
    
        JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
        Connection conn = MyDatabaseClass.getConnection();
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, conn);
        JasperViewer.viewReport(jasperPrint);
    } catch (Exception ex) {
        String connectMsg = "Could not create the report " + ex.getMessage() + " " + ex.getLocalizedMessage();
        System.out.println(connectMsg);
    }
    

    通过这样的方法,您可以创建一个包含新查询的类的成员变量,并使用所需的任何用户约束来构建它。然后在查看时只需修改设计。

    -杰夫

    【讨论】:

    • 我实际上正在寻找其他东西,但你的这篇文章对我很有帮助,谢谢
    • 只是想我会添加您还可以通过执行 jasperDesign.getQuery().getText(); 来获取原始查询(如果这是您想要更新的查询);
    【解决方案2】:

    JasperDesign 帮我解决了在 Jrxml 文件上构建动态查询的问题。

    为了构建动态 SQL,我使用Squiggle(Google Code) 来动态构建 SQL。 谢谢杰夫

    【讨论】:

      【解决方案3】:

      我已经使用存储过程来完成它,这对于这类东西来说很好。否则,您可能会切换到 Java。只需从数据库中获取数据并根据用户提供的参数对其进行过滤、分组并作为 bean 的集合发送到将进行渲染的 Jasper 报告。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-13
        • 2013-02-15
        • 1970-01-01
        相关资源
        最近更新 更多