【问题标题】:Getting 3 mins to Generate the Jasper Report花 3 分钟时间生成 Jasper 报告
【发布时间】:2015-05-08 09:34:13
【问题描述】:

我正在使用 Jasper 报告开发发票打印系统,现在我可以打印报告,但加载报告需要 2000 毫秒,开始打印也需要 2000 毫秒, 这些是我正在使用的 JAR 文件,

commons-beanutils-1.4 commons-digester-1.7 公共日志记录-1.0.3 commons-beanutils-1.4 groovy-all-1.7.5 蜡染全1.7 条形码4j-2.1 itextpdf-5.1.0 jasperreports-6.0.3 xercesImpl-2.11.0 xml-apis-ext-1.3.04

preparedStatement = conn.prepareStatement(sqlString);
    resultSet = preparedStatement.executeQuery();

    if (resultSet.next()) {

        HashMap<String, Object> hm = new HashMap<>();

        JasperDesign jasperDesign = JRXmlLoader.load(new File(
                "C:/Invoice/Invoice.jrxml"));

        JRDesignQuery designQuery = new JRDesignQuery();
        designQuery.setText(sqlString);
        jasperDesign.setQuery(designQuery);

        JasperReport jasperReport = JasperCompileManager
                .compileReport(jasperDesign);
        JasperPrint jasperPrint = JasperFillManager.fillReport(
                jasperReport, null, conn);

        for (int i = 0; i < copies; i++) {

            JasperPrintManager.printReport(jasperPrint, false);


        }

        JasperViewer.viewReport(jasperPrint); 

上面的代码我用来打印报告,但是加载报告的时间太多。请提出我的错和其他想法...

【问题讨论】:

    标签: jasper-reports


    【解决方案1】:

    我猜 SQL 查询可能是问题所在。您是否尝试过在 sql 查询工具中执行它并检查它运行了多长时间?对其进行优化应该会带来性能上的提升。

    您还运行了两次查询:在报告之前和通过 JasperFillManager.fillReport() 调用填充报告时。

    如果没有特定的原因来检查查询是否包含任何记录,我会建议让 JasperReports 处理查询以及未找到记录的情况。在这种情况下,您可以通过报表设计中的“当无数据类型”属性确定特定行为。

    【讨论】:

    • 我已经检查了 SQL,它执行得很快。 “您还运行了两次查询:在报告之前和通过 JasperFillManager.fillReport() 调用填充它时。”我没有明白这一点,你能解释一下吗,这是我放的示例代码。所以,我已经在我的项目中验证了当没有数据类型时。当我调试此代码时,在这些行中花费了太多时间 JRDesignQuery designQuery = new JRDesignQuery(); JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, conn);
    • 您应该将 .jrxml 预编译为 .jasper 文件。这样,您可以将其直接加载到 JasperReport 对象中。然后,您可以通过将结果集包装在 JRResultSetDataSource 中来传递它。
    • 它应该看起来像这样:preparedStatement = conn.prepareStatement(sqlString); resultSet = preparedStatement.executeQuery(); if (resultSet.next()) { resultSet.beforeFirst(); JasperReport jasperReport = JRLoader.load(new File( "C:/Invoice/Invoice.jasper")); JasperPrint jasperPrint = JasperFillManager.fillReport( jasperReport, null, new JRResultSetDataSource(resultSet));
    • 但我无法在我的应用程序中获取 .jasper 编译报告。但是如果我创建的新示例项目显示 .jasper 为什么会这样?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多