使用JasperReport+iReport生成报表出现一个问题,请各位高手帮忙看一下!急!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用JasperReport+iReport生成报表出现一个问题,请各位高手帮忙看一下!急!相关的知识,希望对你有一定的参考价值。

将日期参数传入SQL中查询,结果不能生成报表。
报表参数已加入:startDate java.util.Date
endDate java.util.Date
字段中已加入: collectDate java.util.Date
报错如下:
net.sf.jasperreports.engine.JRException: Error preparing statement for executing the report query :
select a.personName,b.deviceRecordID,c.merchantName, b.sign,b.collectContent from person a,deviceRecord b,merchant c where a.personID = b.personID and c.merchantID = b.merchantID and b.collectDate between '?' and '?' at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createStatement(JRJdbcQueryExecuter.java:192) at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:123) at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:656) at net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:588) at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1212) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:849) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:798) at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:63) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:402) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:234) at it.businesslogic.ireport.IReportCompiler.run(IReportCompiler.java:947) at java.lang.Thread.run(Thread.java:595) Caused by: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Invalid parameter binding(s).
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source) at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source) at com.microsoft.jdbc.base.BasePreparedStatement.validateParameterIndex(Unknown Source) at com.microsoft.jdbc.base.BasePreparedStatement.setObjectInternal(Unknown Source) at com.microsoft.jdbc.base.BasePreparedStatement.setDate(Unknown Source) at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.setStatementParameter(JRJdbcQueryExecuter.java:396) at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.setStatementParameter(JRJdbcQueryExecuter.java:209) at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createStatement(JRJdbcQueryExecuter.java:184) ... 11 more
Print was not filled. Try using an EmptyDataSource...
我现在把SQL语句修改了一下,
between '?' and '?' 修改为:between ? and ? 将现在报表没问题了。
日期格式定义不变

日期格式不正确,转化字符串试试
'2008-01-01'的格式
参考技术A 软件错误吧,我一般遇到这问题就找客服,还是解决不了只能换个软件了,我现在自用finereport,感觉功能还不错,你可以试试

iReport生成pdf打印

先下载ireport版本 ,我下载的是 iReport-5.0.4  编辑模板  employees_identity_print_templet
 @RequestMapping("printEmpPdf")
    @ResponseBody
    public Result printEmpPdf(HttpServletRequest request,HttpServletResponse response, Parameter parameter){
        Result result=Result.getInitializedResult();
        try{
            parameter = generateParameter(parameter, request);
            Map<String,Object> map= parameter.getParam();
            List<EmployeeVO> employeeVOList=employeeBiz.printPdfBarcode(map);

            // 报表数据源
            JRDataSource jrDataSource = new JRBeanCollectionDataSource(employeeVOList);
            //模板地址
            String jasperSource_adidas= CommonUtils.getAllMessage("jdbc","EMPLOYEES_IDENTITY_PRINT_PDF_TEMPLET")+"employees_identity_print_templet.jasper";
            File reportFile = new File(jasperSource_adidas);
            Map<String, Object> param_common=new HashMap<String, Object>();
            param_common.put("subReport",jasperSource_adidas);
            JasperPrint jasperPrint;
            jasperPrint = JasperFillManager.fillReport(reportFile.getPath(), param_common, jrDataSource);
            String fullPath = String.valueOf(System.currentTimeMillis()).concat("_员工列表.pdf"); //生成PDF文件保存地址
            String filePdfUrl= CommonUtils.getAllMessage("jdbc","IREPORT_FILE_URL");
            JRPdfExporter pdfExporter = new JRPdfExporter();
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            pdfExporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);
            pdfExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);
            pdfExporter.exportReport();
            byte[] bytes = baos.toByteArray();
            File file=new File(filePdfUrl+fullPath);
            WebUtil.writeByteArrayToFile(file,bytes);
            result.baseSucResult(fullPath);
        }catch (Exception e){
            result.baseFailResult("EmployeeController printEmpPdf error",parameter);
            logger.error("EmployeeController printEmpPdf error",e);
        }
        return result;
    }
这是需要的maven 包
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>5.6.0</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.2.2</version>
</dependency>

<!-- iReport PDF中文支持 -->
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itextasian</artifactId>
<version>2.1.7.js2</version>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7.js2</version>
</dependency>
<dependency>
<groupId>net.sourceforge.barbecue</groupId>
<artifactId>barbecue</artifactId>
<version>1.5-beta1</version>
</dependency>

<dependency>
<groupId>ireport</groupId>
<artifactId>ireport-utils</artifactId>
<version>2.0.1</version>
</dependency>

<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2</version>
</dependency>
<dependency>
<groupId>commons-digester</groupId>
<artifactId>commons-digester</artifactId>
<version>1.8</version>
</dependency>

以上是关于使用JasperReport+iReport生成报表出现一个问题,请各位高手帮忙看一下!急!的主要内容,如果未能解决你的问题,请参考以下文章

iReport+JasperReport1.iReport与JasperReport基础

生成报表(转)

jasperReport/iReport 子报表显示空白(未显示)

jasperreport开发手册--ireport教程

iReport的安装以及安装完成后出现闪退的解决

求使用iReport+JasperReport制作报表时格式设置