Java 仅当jrxml使用的sql中包含数据时才打印jrxml报告

Java 仅当jrxml使用的sql中包含数据时才打印jrxml报告,java,jasper-reports,Java,Jasper Reports,只有当jrxml使用的sql中包含一些数据时,我才需要通过Java打印报告。为了做到这一点,我需要点击数据库两次,第一次检查sql是否有任何记录,第二次打印报告。这样做,花费的时间是平常的两倍。有什么方法可以让我检查它是否有数据并第一次自己打印吗?使用JRDataSource sql查询返回的数据可以存储在集合中,并根据向量的大小来决定。以下只是实现这一想法的一种方法:- java.util.Vector vector = new java.util.Vector(); vector = get

只有当jrxml使用的sql中包含一些数据时,我才需要通过Java打印报告。为了做到这一点,我需要点击数据库两次,第一次检查sql是否有任何记录,第二次打印报告。这样做,花费的时间是平常的两倍。有什么方法可以让我检查它是否有数据并第一次自己打印吗?

使用JRDataSource

sql查询返回的数据可以存储在集合中,并根据向量的大小来决定。以下只是实现这一想法的一种方法:-

java.util.Vector vector = new java.util.Vector();
vector = getDatabaseRecords(); //function for extracting db records.

if(vector.size() !=0){  //some records 
   //create datasource bean
   JRDataSource bs = new JRBeanCollectionDataSource(vector); 
   //compile report 
   JasperReport jasperReport = JasperCompileManager.compileReport(url); 
   JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, bs); } else{ return "no records found"}         
如果使用iReport,则必须添加JavaBean数据源。有关在iReport中进一步添加说明,请单击


你也可以抽出一些时间来完成

您可以使用JasperPrint类的getPages()属性的size方法:

        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, conn);  
        int noPages = jasperPrint.getPages().size();
        if(noPages > 0) 
        {
            JasperExportManager.exportReportToPdfFile(jasperPrint, path + "{name_of_file}.pdf");
        }
        else
        {
            //Do something else...
        }
是的,例如,您可以使用。您可以收集数据,然后选择正确的方式继续应用程序