当前位置:  开发笔记 > 数据库 > 正文

JRXML中的动态查询字符串

如何解决《JRXML中的动态查询字符串》经验,为你挑选了1个好方法。

我正在尝试构建一个足够聪明的报告,根据某种输入参数略微修改其sql查询.

例如,如果该特殊修改参数值为"1",则会在select中添加一个字段,并将group by子句添加到查询中.

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

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

谢谢你的帮助.


谢谢你们的帮助,非常感谢你们.然而,我找到了另一种方法,并将其发布以供参考:这里



1> 小智..:

JasperDesign实际上允许您修改jrxml文档的部分内容.因此,假设您有一个"报告"软件包,您可以手动或通过iReport等工具存储您的报告.只要您的查询在标记中定义,以下内容将允许您动态更改查询:

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);
}

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

-Jeff

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有