分两种方法
第一种
1.模版
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN"
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport name="DBReport">
<parameter name="hp" class="java.lang.Integer"></parameter>
<queryString>
<![CDATA[
select tb.name as name,tb.age as age,tbs.marks as marks from jaspertb tb join jaspertbs tbs on(tb.id = tbs.tbid) where tb.id > $P{hp}
]]>
</queryString>
<field name="marks" class="java.lang.Integer"></field>
<field name="name" class="java.lang.String"></field>
<field name="age" class="java.lang.Integer"></field>
<pageHeader>
<band height="30">
<staticText>
<reportElement x="0" y="0" width="69" height="24" />
<text><![CDATA[marks:]]></text>
</staticText>
<staticText>
<reportElement x="140" y="0" width="79" height="24" />
<text><![CDATA[name:]]></text>
</staticText>
<staticText>
<reportElement x="280" y="0" width="69" height="24" />
<text><![CDATA[age:]]></text>
</staticText>
<staticText>
<reportElement x="420" y="0" width="69" height="24" />
<text><![CDATA[you don't see this]]></text>
</staticText>
</band>
</pageHeader>
<detail>
<band height="30">
<textField>
<reportElement x="0" y="0" width="69" height="24" />
<textFieldExpression class="java.lang.Integer">
<![CDATA[$F{marks}]]>
</textFieldExpression>
</textField>
<textField>
<reportElement x="140" y="0" width="69" height="24" />
<textFieldExpression class="java.lang.String">
<![CDATA[$F{name}]]>
</textFieldExpression>
</textField>
<textField>
<reportElement x="280" y="0" width="69" height="24" />
<textFieldExpression class="java.lang.Integer">
<![CDATA[$F{age}]]>
</textFieldExpression>
</textField>
<staticText>
<reportElement x="420" y="0" width="69" height="24" />
<text><![CDATA[If you don't see this, it didn't work]]></text>
</staticText>
</band>
</detail>
</jasperReport>
2.把上面的JRXML文件生成JASPER文件,方便在WEB里面的调用(可以用下面的方法先生成好,放到你知道的文件夹下面)
JasperCompileManager.compileReportToFile("WebRoot\\report\\JasperReportSQL.xml","WebRoot\\report\\JasperReportSQL.jasper");
3.写Servlet调用
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperRunManager;
public class DynamicCreateReportWithServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Connection connection = null;
//获得输出流
ServletOutputStream servletOutputStream = response.getOutputStream();
//获得JASPER文件的输入流,一定要知道你的文件的地方
InputStream is = getServletConfig().getServletContext().getResourceAsStream("report\\JasperReportSQL.jasper");
//生成Map对象传数据
HashMap hm = new HashMap();
hm.put("hp", new Integer(3));
try {
//连结JDBC
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jasperreportdb","root", "root");
//生成相于的PDF输入流,这个JasperRunManager对象还有很多种方法的,这只是一种
JasperRunManager.runReportToPdfStream(is,servletOutputStream,hm, connection);
//设置格式
response.setContentType("application/pdf");
servletOutputStream.flush();
servletOutputStream.close();
connection.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (JRException e) {
e.printStackTrace();
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
第二种方法
1.这种方法JRXML文件里面不用写SQL
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN"
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport name="DBReport">
<field name="id" class="java.lang.Integer"></field>
<field name="name" class="java.lang.String"></field>
<field name="marks" class="java.lang.Integer"></field>
<pageHeader>
<band height="30">
<staticText>
<reportElement x="0" y="0" width="69" height="24" />
<text><![CDATA[id:]]></text>
</staticText>
<staticText>
<reportElement x="140" y="0" width="79" height="24" />
<text><![CDATA[name:]]></text>
</staticText>
<staticText>
<reportElement x="280" y="0" width="69" height="24" />
<text><![CDATA[marks:]]></text>
</staticText>
<staticText>
<reportElement x="420" y="0" width="69" height="24" />
<text><![CDATA[you don't see this]]></text>
</staticText>
</band>
</pageHeader>
<detail>
<band height="30">
<textField>
<reportElement x="0" y="0" width="69" height="24" />
<textFieldExpression class="java.lang.Integer">
<![CDATA[$F{id}]]>
</textFieldExpression>
</textField>
<textField>
<reportElement x="140" y="0" width="69" height="24" />
<textFieldExpression class="java.lang.String">
<![CDATA[$F{name}]]>
</textFieldExpression>
</textField>
<textField>
<reportElement x="280" y="0" width="69" height="24" />
<textFieldExpression class="java.lang.Integer">
<![CDATA[$F{marks}]]>
</textFieldExpression>
</textField>
<staticText>
<reportElement x="420" y="0" width="69" height="24" />
<text><![CDATA[If you don't see this, it didn't work]]></text>
</staticText>
</band>
</detail>
</jasperReport>
2.同样是用下面的方法生成JASPER文件
JasperCompileManager.compileReportToFile("WebRoot\\report\\JasperReportSQLResult.xml","WebRoot\\report\\JasperReportSQLResult.jasper");
3.写出Servlet
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperRunManager;
public class DynamicCreateReportWithServletDateSource extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Connection connection = null;
Statement statument = null;
ResultSet resultSet = null;
String sql = "select tb.name as name,tb.age as age,tbs.marks as marks from jaspertb tb join jaspertbs tbs";
ServletOutputStream servletOutputStream = response.getOutputStream();
InputStream is = getServletConfig().getServletContext().getResourceAsStream("report\\JasperReportSQLResult.jasper");
try {
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jasperreportdb","root", "root");
statument = connection.createStatement();
resultSet = statument.executeQuery(sql);
//这里把ResultSet封装到JRResultSetDataSource对象里面了
JasperRunManager.runReportToPdfStream(is,servletOutputStream,new HashMap(), new JRResultSetDataSource(resultSet));
response.setContentType("application/pdf");
servletOutputStream.flush();
servletOutputStream.close();
connection.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (JRException e) {
e.printStackTrace();
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
注意:JRXML文件里面数据库的字段都是用$F{marks},而parameter是用$P{xxxx}表示的
,而parameter的值都是传过去的那个HashMap里面设置的
分享到:
相关推荐
jasperreport 6.4.1报表动态列,以及生成导出html,可直接导入到eclipse中进行运行,包含一个完整的demo
-----iReport&JasperReport学习教程(PDF版)-----
NULL 博文链接:https://yangzc106.iteye.com/blog/929759
是一款报表打印组件,是开放源代码组织 中的一个 报表打印工程, JasperReport sf.net 由于 本身并未提供很好的可视化报表设计工具, JasperReport 在之后推出了 iReport ,作为 报表模版编辑软件,具有以下突出的...
使用ireport jasperreport 三级(父-子-孙)关联报表的制作和输出,版本号4.7.0,直接导入eclipse即可。 依次选择: File > import > General > Existing Projects into Workspace > Select archive file >压缩包。
iReport+jasperReport之客户端打印 数字签名
jasperreport生成多种格式的报表,包括PDF、HTML、RTF、XML、EXCEL等格式的报表
jasperreport-2.0.5-project java报表插件,可以形成xml格式的报表,容易集成到java web程序,配合修改报表的修改工具iReport使用。
在本人修改的该版本彻底解决了以上问题(和本人上传的struts2-jasperreport-plugin-adjust3.1 相比,稍有变动),此次以相对低分分享于jar及源码【毕竟之前仅jar收取5分,为公平起见,收取4分,望见谅,您可以注册...
在原有官方struts2-jasperreport-plugin-2.1.6.jar的基础上解决了三个问题:一是普通报表HTML及Excel格式预览无法显示px图片;一是图形报表无法HTML格式预览;一是图形报表一次请求返回多张时存在报表覆盖异常现象;
在官方struts2-jasperreport-plugin-2.1.6基础上,解决问题有二:一是普通报表HTML及Excel格式预览无法显示px图片,二是图形报表HTML格式无法展示;分享于有需要的朋友~~
jasperreport从数据库中取数据
程序员 使用 jasperreport studio生成中文报表 spring boot 教程
JasperReport简易入门教程--亲测有效-附件资源
JasperReport 中交叉报表指南
官方的struts2-jasperreport-plugin-2.1.6.jar,分享于有需要的朋友~~
iReport 和 Jasperreport整合开发web报表向导2
学习Jasperreport和ireport的好资料!
Dynamic+Jasper+Mysql连接生成报表示例
jasperreport实现动态表头的例子