- 准备工作:
1、下载JReport:http://down10b.zol.com.cn/bianchengtools/333513_ireport300.zip?key=287ff4fc316487d19e8c5537ba13d7e4
图文教程下载:http://files.blogjava.net/luodaijun/ireport%E5%9B%BE%E6%96%87%E6%95%99%E7%A8%8B.zip
2、下载安装MySQL:http://ftp.iij.ad.jp/pub/db/mysql/Downloads/MySQL-5.5/mysql-5.5.11-win32.msi
在test中建个test表,有id和name字段
3、安装JDK、eclipse,这个就不用说了吧。
- 制作报表:
请参考 图文教程 中的操作,自己动手做出一张报表,这里我不在细说,只要展示id和name字段就行了。
保存为classic.jrxml文件,我放在E:\rpt下面。注意,这个一般放在项目目录中,以后使用相对路径,现在我使用的绝对路径,我只是测试一下,到时候要使用流来读取。
- 编码调用报表
在eclipse中建立一个java项目
TestBean类,是一个普通bean,跟数据库中字段一样就好了,有set get方法
public class TestBean {
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private int id;
private String name;
}
Test类是调用的报表的类,
import java.io.File;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.view.JasperViewer;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
try {
JasperReport jr = null;
JasperPrint jp = null;
FileInputStream fis = new FileInputStream(new File(
"E:\\rpt\\classic.jrxml"));
jr = JasperCompileManager.compileReport(fis);
Map<String, String> map = new HashMap<String, String>();
// map.put("id", "test"); //这里是传参数的 必须先在ireport 中定义好 参数
// map.put("name", "test");
JRDataSource dataSource = new JRBeanCollectionDataSource(getTest());
jp = JasperFillManager.fillReport(jr, map, dataSource);
JasperViewer.viewReport(jp);
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getConnection() {
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost/test";
String userName = "root";
String password = "root";
Connection conn = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, userName, password);
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return conn;
}
public static List<TestBean> getTest() {
List<TestBean> list = new ArrayList<TestBean>();
String sql = "select id,name from test";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
conn = getConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
while (rs.next()) {
TestBean tb = new TestBean();
tb.setId(rs.getInt("id"));
tb.setName(rs.getString("name"));
list.add(tb);
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
}
具体代码见附件。
- 注意事项:
1、必须使用JDK5,我刚开始使用JDK6一直报错,找不到原因,各位不要再绕弯路了
2、使用了FileInputStream来读取E:\rpt\classic.jrxml这个文件,这个是绝对路径
3、我使用了JRBeanCollectionDataSource ,报表中有自己的DataSource,我不知道怎么使用,就用JDBC写了一个。但是从项目角度考虑,我们一个项目肯定使用一个数据源,所以如果每次调用报表,都使用报表自己的数据源是不可取的,但是自己的DataSource确很好维护,直接改变SQL语句就能修改了,所以请达人告诉我怎么直接调用JReport的DataSource,不胜感激。
4、项目中所用的lib可以在ireport的软件的lib下面找到,只有MySQL的JDBC需要自己去下载驱动。
本文介绍如何使用JReport制作报表,并通过Java代码实现报表的调用与显示。从环境搭建到具体编码,包括JDK、Eclipse、MySQL安装配置,以及报表设计和数据源处理等关键步骤。
133

被折叠的 条评论
为什么被折叠?



