jasperreport和JSP使用mysql查询问题

时间:2018-09-23 06:55:57

标签: jsp jasper-reports

我使用JasperReport 5.5.0和jsp连接到MySQL。

当我的sql查询为 select * from send 它可以在JasperReport pdf中显示所有数据。

但是当我的sql查询是 select * from send where name like 'n%' 它只能显示最后'n%'行(但是我的'n%'有5行)

这是我的代码:

<% 
    String sql = "select * from send where name like 'n%' "; 
    ResultSet rs = stmt.executeQuery(sql);
    JRDataSource dataSource = new JRResultSetDataSource(rs);
    File reportFile;
    Map parameters = new HashMap();
    byte[] bytes = {0};
    ServletOutputStream outStream ;
    reportFile = new File(application.getRealPath("/report/report3.jasper"));
    while(rs.next())
    {
        parameters.put("name",rs.getString("name"));
        parameters.put("youad",rs.getString("youad"));       
        bytes = JasperRunManager.runReportToPdf(reportFile.getPath(), 
parameters,dataSource); 
    }   
    response.setContentType("application/pdf");
    response.setContentLength(bytes.length);
    outStream = response.getOutputStream();
    outStream.write(bytes, 0, bytes.length);
    outStream.flush();
    outStream.close(); 
    rs.close();              
%> 

请帮助我。 谢谢

1 个答案:

答案 0 :(得分:0)

问题是您在Jasper报告中使用的是$P{name}而不是$F{name}。其中$P{name}(参数name)将始终包含最后一个值,因为当您遍历结果集并将名称值放入parameters键下的name映射中时它将覆盖先前的值。

另一个问题是,您在每个JasperRunManager.runReportToPdf()迭代中都调用while,并且为每个ResultSet行创建PDF,但是仅保留最后的PDF字节(包含SQL select的最后一行)。

因此,您可以简单地从JSP中删除整个while周期,只调用一次JasperRunManager.runReportToPdf(),然后在其中为所有需要的值(nameyouad)定义字段报告模板,并使用字段$F{}语法而不是参数来使用它们。然后,JasperReport将使用JRResultSetDataSource实例中的所有值。