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

摘要:
前言:在上一篇文章中,我们介绍了如何使用JasperReport生成查询数据库的报告。今天,我们将更进一步,即如何使用参数查询数据库。与上一篇文章一样,我们需要以下步骤来生成报告:1.要导入jar包,请参阅静态文本报告。

前言

上一篇我们介绍了如何使用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" />

<queryString>

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

</queryString>

<fieldname="ID" />

<fieldname="NAME" />

<fieldname="SEX" />

<pageHeader>

<bandheight="30">

<staticText>

<reportElementx="0" y="0" />

<textElementverticalAlignment="Bottom"/>

<text>Id</text>

</staticText>

<staticText>

<reportElementx="140" y="0" />

<text>Name</text>

</staticText>

<staticText>

<reportElementx="280" y="0" />

<text>Sex</text>

</staticText>

</band>

</pageHeader>

<detail>

<bandheight="30">

<textField>

<reportElementx="0" y="0" />

<textFieldExpressionclass="java.lang.Integer">

$F{ID}

</textFieldExpression>

</textField>

<textField>

<reportElementx="140" y="0" />

<textFieldExpressionclass="java.lang.String">

$F{NAME}

</textFieldExpression>

</textField>

<textField>

<reportElementx="280" y="0" />

<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——带参数查询数据库第1张

小结:

在我写的《开发者使用JasperReport》系列中,我会给大家介绍如何简单的使用JasperReport,从最初的生成报表,到后面的与数据库交互,之后还会介绍不同形式的数据源生成报表。

免责声明:文章转载自《开发者使用JasperReport——带参数查询数据库》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇VFS: Cannot open root device "mtdblock5" or unknown-block(0,0): error -6解决方法【Maven】CentOS7使用Nexus3搭建maven私服下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

linq的decimal类型保存到数据库只保存到小数点后两位的问题

今天的一个decimal类型保存到数据的问题困扰了我很长时间,最后就是一个小小的设置问题解决······坑······深坑···· 话不多说,直接说问题,在说答案: 问题:linq当采用EF的DbContext保存decimal类型数据到数据库,默认只会保存小数点后的前2位小数,其余均置0;         例如保存1.23456789,实际存到数据库里的...

Mybatis中parameterType、resultMap、statementType等等配置详解(标签中基本配置详解)

一、(转自:https://blog.csdn.net/majinggogogo/article/details/72123185) 映射文件是以<mapper>作为根节点,在根节点中支持9个元素,分别为insert、update、delete、select(增删改查);cache、cache-ref、resultMap、parameterMa...

java常用的中间件

tomcatWeblogicJBOSSColdfusionWebsphereGlassFish 一般本地开发的话建议使用tomcat。 linux系统建议使用jetty或apache hpptd 大型的项目就用JBOSS或webloigc 小项目,或者是个人开发tomcat 大项目或者商业项目一般采用:weblgoic/webshere 其他的还有jb...

Oracle 11g数据库创建表空间、用户、目录、以及给用户授权

以下操作皆是Windows下操作: 一、创建表空间 创建表空间,是管理员级别的操作,当你装了一个数据库,这个数据库的表空间可以不止一个,可以根据实际情况来对应的增加、创建 打开命令提示符的窗口:可以直接Windows键+R,也可以如下图所示打开,用管理员身份登录sqlplus ,登录成功之后就可以输入以下命令: create tablespace MYSP...

.net 中dapper实现事务的三种方式总结

.net 中实现事务查询的三种方式 1.TransactionScope  通过创建TransactionScope  对象然后包裹connection对象执行相关查询操作,完成    此种方式可以用于分布式事务操作,当链接不同数据库时,通过简单配置可以实现不同数据库的事务操作,当使用单机查询时(即只有一个数据库并且与应用服务器在同一台电脑时,不需要做额外...

boot 项目启动报Cannot datermine embedded database driver class for database type NONE

部署boot项目时报Cannot datermine embedded database driver class for database type NONE数据库链接什么的也都没有问题,经过百度 因为spring boot只要你在pom中引入了mybatis-spring-boot-starter 他就会默认需要加载数据库相关的配置 你要是没有在配置文...