開發者使用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,從最初的生成報表,到后面的與數據庫交互,之后還會介紹不同形式的數據源生成報表。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM