zoukankan      html  css  js  c++  java
  • 开发者使用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,从最初的生成报表,到后面的与数据库交互,之后还会介绍不同形式的数据源生成报表。

     

  • 相关阅读:
    Ftp、Ftps与Sftp之间的区别
    Previous Workflow Versions in Nintex Workflow
    Span<T>
    .NET Core 2.0及.NET Standard 2.0 Description
    Announcing Windows Template Studio in UWP
    安装.Net Standard 2.0, Impressive
    SQL 给视图赋权限
    Visual Studio for Mac中的ASP.NET Core
    How the Microsoft Bot Framework Changed Where My Friends and I Eat: Part 1
    用于Azure功能的Visual Studio 2017工具
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/2992041.html
Copyright © 2011-2022 走看看