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

前言

上一篇我们介绍了如何使用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,从最初的生成报表,到后面的与数据库交互,之后还会介绍不同形式的数据源生成报表。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在 JSP 页面中使用 JasperReport,可以按照以下步骤: 1. 在你的项目中导入 JasperReport 的相关库文件。 2. 创建一个 JasperReport 报表模板文件,可以使用 JasperReport 的设计工具 iReport 进行创建。 3. 在 JSP 页面中编写代码,创建一个 JasperReport 报表,并填充数据。 4. 将 JasperReport 报表输出到指定的输出流。 下面是一个简单的示例代码,演示如何在 JSP 页面中使用 JasperReport: ```java <%@ page import="java.util.*" %> <%@ page import="java.io.*" %> <%@ page import="net.sf.jasperreports.engine.*" %> <%@ page import="net.sf.jasperreports.engine.export.*" %> <%@ page contentType="application/pdf" %> <% // 创建一个 JasperReport 报表 JasperReport jasperReport = JasperCompileManager.compileReport("report_template.jrxml"); // 填充数据 Map<String, Object> params = new HashMap<String, Object>(); params.put("parameter1", "value1"); params.put("parameter2", "value2"); JRDataSource dataSource = new JREmptyDataSource(); JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, dataSource); // 输出 JasperReport 报表到指定的输出流 OutputStream out = response.getOutputStream(); JasperExportManager.exportReportToPdfStream(jasperPrint, out); %> ``` 在这个示例代码中,我们首先创建了一个 JasperReport 报表,并填充了一些数据。然后,我们将 JasperReport 报表输出到一个 PDF 文件中。在这个例子中,我们将 PDF 文件直接输出到了 JSP 页面的输出流中,因此最后生成的 PDF 文件将直接在浏览器中显示出来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值