JasperReport+iReport+Applet+Servlet制作报表
项目是B/S的,标示层使用的是Openlaszlo,客户要求在打印的时候不需要选择打印的纸张类型,报表显示就直接打印,所以我在客户做了一个小应用程序。
需要的jar有:msbase.jar;mssqlserver.jar;msutil.jar;jasperreports-2.0.5-applet.jar;
jasperreports-1.3.3.jar;jasperreports-2.0.5-javaflow.jar
需要使用Ireport设计模板,放在reports目录下,载入*.jasper文件
?做一个ViewerApplet的类,继承JApplet
package com.gddzmr.db;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.sql.Statement;import java.util.ArrayList;import java.util.HashMap;import java.util.List;public class DBManager {private String driverName = "com.microsoft.jdbc.sqlserver.SQLServerDriver";private String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";private String user = "sa";private String password = "";private Connection cnn;private Statement stat;private PreparedStatement ps;public DBManager() {}/** * 新建一个数据库连接 * */public void openDB() {try {// 加载数据连接驱动Class.forName(driverName);// 获取数据库连接cnn = DriverManager.getConnection(url, user, password);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}/** * Statement执行查询语句,返回查询的结果集 * * @param sql * @return */public ResultSet executeQuery(String sql) {try {stat = cnn.createStatement();return stat.executeQuery(sql);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}/** * Statement执行update,insert,delete语句,返回影响的行数 * * @param sql * @return */public int executeUpdate(String sql) {try {stat = cnn.createStatement();return stat.executeUpdate(sql);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return 0;}/** * Statement执行存储过程,返回ture/false * * @param sql * @return */public boolean executeProcedural(String sql) {try {stat = cnn.createStatement();return stat.execute(sql);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return false;}/** * prepareStatement执行查询语句,返回查询的结果集 * * @param sql * @param list * @return */public ResultSet executeQuery(String sql, List list) {try {ps = cnn.prepareStatement(sql);if (list.size() != 0 && list != null) {for (int i = 0; i < list.size(); i++) {ps.setObject(i + 1, list.get(i));}}return ps.executeQuery(sql);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}/** * prepareStatement执行update,insert,delete语句,返回影响的行数 * * @param sql * @param list * @return */public int executeUpdate(String sql, List list) {try {ps = cnn.prepareStatement(sql);if (list.size() != 0 && list != null) {for (int i = 0; i < list.size(); i++) {ps.setObject(i + 1, list.get(i));}}return ps.executeUpdate(sql);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return 0;}/** * prepareStatement执行存储过程,返回ture/false * * @param sql * @param list * @return */public boolean executeProcedural(String sql, List list) {try {ps = cnn.prepareStatement(sql);if (list.size() != 0 && list != null) {for (int i = 0; i < list.size(); i++) {ps.setObject(i + 1, list.get(i));}}return ps.execute(sql);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return false;}/** * 关闭数据库连接,释放statment * */public void closeSTDB() {try {stat.close();cnn.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/** * 关闭数据库连接,释放PreparedStatement * */public void closePSDB() {try {ps.close();cnn.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/** * 将ResultSet结果集,转换为List<HashMap>,为创建jasperPrint做准备 * @param rs * @return */public List getMapList(ResultSet rs) {ArrayList<HashMap> list = new ArrayList<HashMap>();ArrayList<String> nameList = new ArrayList<String>();try {// 获取字段名的数组ResultSetMetaData md = rs.getMetaData();for (int i = 1; i <= md.getColumnCount(); i++) {nameList.add(md.getColumnName(i));}// 根据字段名,获取rs中字段的值if (rs != null) {while (rs.next()) {HashMap map = new HashMap();for (int i = 0; i < nameList.size(); i++) {map.put(nameList.get(i), rs.getObject(nameList.get(i)));}list.add(map);}}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return list;}public static void main(String[] args) {DBManager db = new DBManager();db.openDB();ResultSet rs = db.executeQuery("select * from authors");ArrayList<HashMap> list = new ArrayList<HashMap>();ArrayList<String> nameList = new ArrayList<String>();try {// 获取字段名数组ResultSetMetaData md = rs.getMetaData();for (int i = 1; i <= md.getColumnCount(); i++) {nameList.add(md.getColumnName(i));}if (rs != null) {while (rs.next()) {HashMap map = new HashMap();for (int i = 0; i < nameList.size(); i++) {System.out.println(nameList.get(i) + "===="+ rs.getObject(nameList.get(i)));map.put(nameList.get(i), rs.getObject(nameList.get(i)));}list.add(map);}}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}db.closeSTDB();}}?
1 楼 fengfan2008 2008-05-30 很好, 楼主能不能发扬开源精神把源码贴出来啊! 2 楼 love1907 2008-10-02 很好、。。。。。。。。。。 3 楼 lzmch 2008-10-02 写这么多,你出的报表是什么样式?取数的逻辑是什么?先简单说说再写,别人也好看明白,你这样一上来就是代码,没什么实际意义。 4 楼 melody_5207 2008-10-27 楼主~~可以告诉一下联系方式吗? 有问题请教
我的QQ:414902377 MSN:jz_melody328@hotmail.com
5 楼 longlongriver 2008-10-27 JasperReport3已经支持基于flash的报表展示了,可以更灵活的支持B/S下的报表展示了! 6 楼 melody_5207 2008-10-27 longlongriver 写道JasperReport3已经支持基于flash的报表展示了,可以更灵活的支持B/S下的报表展示了!
有实例吗?
7 楼 longlongriver 2008-10-27 melody_5207 写道longlongriver 写道JasperReport3已经支持基于flash的报表展示了,可以更灵活的支持B/S下的报表展示了!
有实例吗?
下载的demo就带了一个web应用的样例,很详细!
8 楼 melody_5207 2008-11-04 longlongriver 写道melody_5207 写道longlongriver 写道JasperReport3已经支持基于flash的报表展示了,可以更灵活的支持B/S下的报表展示了!
有实例吗?
下载的demo就带了一个web应用的样例,很详细!
谢谢~~请问demo什么地方可以下载? 9 楼 melody_5207 2008-11-04 URL url = new URL(getCodeBase(), "../servlet/appletServlet?sql="
~~在web.xml里是怎么配置的??