您的位置:首页 > 编程语言 > ASP

开发者使用JasperReport——带参数查询数据库

2013-03-31 10:46 519 查看
前言
上一篇我们介绍了如何使用JasperReport来生成查询数据库的报表,今天我们在其基础上再稍进一步,那就是如何带参数查询数据库。

正题
跟上一篇一样,我们要生成报表需要以下几个步骤:
1.引入jar包,请看《静态文本报表


2.新建报表模版:
由于我们这次需要带参数查询数据库(查询的是T_USER数据表),所以报表模版需要更改一下,其实只更改了一下查询语句,其他的跟上一篇中相同(我们用$P{}来标识参数,$F{}来标识字段):
<?xmlversion="1.0" encoding="UTF-8"?>
<jasperReportxmlns="http://jasperreports.sourceforge.net/jasperreports"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreportshttp://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
name="ParameterReport">

<parametername="nm" class="java.lang.String"/>

<queryString>

<![CDATA[SELECT * FROM T_USER T WHERE T.NAME=$P{nm}]]>

</queryString>

<fieldname="ID" class="java.lang.Integer"/>

<fieldname="NAME" class="java.lang.String"/>

<fieldname="SEX" class="java.lang.String"/>

 

<pageHeader>
<bandheight="30">

<staticText>

<reportElementx="0" y="0" width="69" height="24"/>

<textElementverticalAlignment="Bottom"/>

<text>Id</text>

</staticText>

<staticText>

<reportElementx="140" y="0" width="79" height="24"/>

<text>Name</text>

</staticText>

<staticText>

<reportElementx="280" y="0" width="69" height="24"/>

<text>Sex</text>

</staticText>
</band>

</pageHeader>

<detail>
<bandheight="30">

<textField>

<reportElementx="0" y="0" width="69" height="24"/>

<textFieldExpressionclass="java.lang.Integer">

$F{ID}

</textFieldExpression>

</textField>

<textField>

<reportElementx="140" y="0" width="69" height="24"/>

<textFieldExpressionclass="java.lang.String">

$F{NAME}

</textFieldExpression>

</textField>

<textField>

<reportElementx="280" y="0" width="69" height="24"/>

<textFieldExpressionclass="java.lang.String">

$F{SEX}

</textFieldExpression>

</textField>                        
</band>

</detail>
</jasperReport>

3.编译报表模版,请看《静态文本报表》。

4.编写servlet:
由于我们需要传参数,所以我们需要在servlet中建立于数据库的连接并给报表模版传参数:
packagecom.dan.servlet;
 
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.PrintWriter;
importjava.io.StringWriter;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.util.HashMap;
 
importjavax.servlet.ServletException;
importjavax.servlet.ServletOutputStream;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
 
importnet.sf.jasperreports.engine.JasperRunManager;
 
/**
 * 根据参数查询数据库
 * @author zdd
 *
 */
publicclass DbReportParamServlet extends HttpServlet {
 

@Override

protectedvoid doGet(HttpServletRequest req, HttpServletResponse resp)

throwsServletException, IOException {
Connectionconnection;
resp.setContentType("application/pdf");
 
ServletOutputStreamservletOutputStream = resp.getOutputStream();
 
InputStreamreportStream =getServletConfig().getServletContext().getResourceAsStream("/WEB-INF/classes/reports/ParameterReport.jasper");
 

HashMap parameterMap = new HashMap();

parameterMap.put("nm", new String("name1"));
try{

Class.forName("oracle.jdbc.driver.OracleDriver");

connection=DriverManager.getConnection("jdbc:oracle:thin:@192.168.24.36:1521:testreport","test","test");

 

JasperRunManager.runReportToPdfStream(reportStream,servletOutputStream,parameterMap,connection);

connection.close();

servletOutputStream.flush();

servletOutputStream.close();
}catch(Exceptione){

StringWriterstringWriter = new StringWriter();

PrintWriterprintWriter = new PrintWriter(stringWriter);

e.printStackTrace(printWriter);

resp.setContentType("text/plain");

resp.getOutputStream().print(stringWriter.toString());
}

}
 
}

5.配置web.xml,就是配置servlet。

6.运行项目
看一下我的运行结果:
 


 
小结:
    在我写的《开发者使用JasperReport》系列中,我会给大家介绍如何简单的使用JasperReport,从最初的生成报表,到后面的与数据库交互,之后还会介绍不同形式的数据源生成报表。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐