我使用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();
%>
请帮助我。 谢谢
答案 0 :(得分:0)
问题是您在Jasper报告中使用的是$P{name}
而不是$F{name}
。其中$P{name}
(参数name
)将始终包含最后一个值,因为当您遍历结果集并将名称值放入parameters
键下的name
映射中时它将覆盖先前的值。
另一个问题是,您在每个JasperRunManager.runReportToPdf()
迭代中都调用while
,并且为每个ResultSet行创建PDF,但是仅保留最后的PDF字节(包含SQL select的最后一行)。
因此,您可以简单地从JSP中删除整个while
周期,只调用一次JasperRunManager.runReportToPdf()
,然后在其中为所有需要的值(name
,youad
)定义字段报告模板,并使用字段$F{}
语法而不是参数来使用它们。然后,JasperReport将使用JRResultSetDataSource
实例中的所有值。