Jasper reports 获得3分钟时间生成Jasper报告
我正在使用Jasper报表开发发票打印系统,现在我可以打印报表,但加载报表需要2000毫秒,开始打印也需要2000毫秒, 这些是我正在使用的JAR文件 commons-beanutils-1.4 commons-digester-1.7 commons-logging-1.0.3 commons-beanutils-1.4 groovy-all-1.7.5 蜡染-all-1.7 条形码4J-2.1 itextpdf-5.1.0 jasperreports-6.0.3 xercesImpl-2.11.0 xml-API-ext-1.3.04Jasper reports 获得3分钟时间生成Jasper报告,jasper-reports,Jasper Reports,我正在使用Jasper报表开发发票打印系统,现在我可以打印报表,但加载报表需要2000毫秒,开始打印也需要2000毫秒, 这些是我正在使用的JAR文件 commons-beanutils-1.4 commons-digester-1.7 commons-logging-1.0.3 commons-beanutils-1.4 groovy-all-1.7.5 蜡染-all-1.7 条形码4J-2.1 itextpdf-5.1.0 jasperreports-6.0.3 xercesImpl-2.1
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);
preparedStatement=conn.prepareStatement(sqlString);
resultSet=preparedStatement.executeQuery();
if(resultSet.next()){
HashMap hm=新的HashMap();
JasperDesign JasperDesign=JRXmlLoader.load(新文件(
“C:/Invoice/Invoice.jrxml”);
JRDesignQuery designQuery=新建JRDesignQuery();
designQuery.setText(sqlString);
setQuery(designQuery);
JasperReport JasperReport=JasperCompileManager
.compileReport(jasperDesign);
JasperPrint JasperPrint=JasperFillManager.fillReport(
康涅狄格州零号jasperReport);
对于(int i=0;i
上面的代码是我用来打印报表的,但是加载报表的时间太长了。请提出我的错误和其他想法…我想SQL查询可能是问题所在。您是否尝试过在SQL查询工具中执行它并检查它运行了多长时间?优化它应该会获得性能优势 您还将运行两次查询:在报表之前和通过JasperFillManager.fillReport()调用填充报表时
如果没有具体原因来检查查询是否包含任何记录,我建议让JasperReports处理查询和未找到记录的情况。在这种情况下,您可以通过reportdesign中的“When no Data Type”属性确定特定行为。我已经检查过SQL,它执行得很快。“您还将运行两次查询:在报告之前和通过JasperFillManager.fillReport()调用填充报告时。“我不明白这一点,你能给我解释一下吗,这是我放的示例代码。因此,我在我的项目中验证了When No Data Type。当我调试这段代码时,在这些行JRDesignQuery designQuery=new JRDesignQuery();JasperPrint JasperPrint=JasperFillManager.fillReport中花费了太多时间。”(jasperReport,null,conn);您应该将.jrxml预编译到.jasper文件中。这样,您可以直接将其加载到jasperReport对象中。然后,您可以通过将结果集包装到JResultSetDataSource中来传递结果集。它应该如下所示:
preparedStatement=conn.prepareStatement(sqlString);resultSet=preparedStatement.executeQuery();if(resultSet.next()){resultSet.beforeFirst();JasperReport-JasperReport=JRLoader.load(新文件(“C:/Invoice/Invoice.jasper”);jasperrprint-jasperrprint=JasperFillManager.fillReport(jasperReport,null,new JRResultSetDataSource(resultSet));
但是我无法在我的应用程序中获得.jasper编译的报告。但是如果我创建了新的示例项目,则会显示.jasper,这是为什么?