当前位置: 首页 > news >正文

iReport连接Mysql创建图表报表

列举一下需要的资源:

1、mySql数据库安装好的

2、iReport+jasperreport配置好

3、我用的是Myeclipse,MySQL的驱动jar包不要忘记

第一部分:创建数据库连接

package com.mySqlsource;

import java.sql.Connection;

public class Database {
	private String dbUrl =  "jdbc:mysql://localhost:3306/bookdb";
	  private String dbUser="root";
	  private String dbPwd="123456";

	  public Database () throws Exception{
	     Class.forName("com.mysql.jdbc.Driver");
	  }

	  public Connection getConnection()throws Exception{
	      return java.sql.DriverManager.getConnection(dbUrl,dbUser,dbPwd);
	  }

	  public void closeConnection(Connection con){
	    try{
	        if(con!=null) con.close();
	      }catch(Exception e){
	        e.printStackTrace();
	      }
	  }
}
这个格式基本都一样的,其中bookdb是我新建数据库的名称,getConnection和closeConnection是两个操作开关,在使用的时候直接新建Database对象调用就好了。

第二部分:先看看我的数据库books表

打开iReport新建一张表不懂的话去看其他人的博客,很多的。在界面上找到数据源打开进行如下选择

这个应该很简单的,设置完之后点击Test会提示测试成功,否则就是你的某些设置没做好,再重新检查一遍

打开组件面板找到拖动到任意bands中,在iReport4.6.0中有一部分表格是有想到的,一部分没有,这个倒没关系了有的话一路next下去

没有的话直接完成后在图表上面右键选择chart data;点击Details,

这里是有默认名称的,双击默认名称打开属性设置界面

关于各个字段的意思及作用,我之前的文章有写到过,这里就不在赘述,有需要的话就翻翻前面的好了。

设置好之后,点击预览会出现如下情况

原因是在设计面板右侧图表的属性一栏,有一个属性Evaluation Time,大致意思就是什么时候进行更新数值,它默认是NOW

在这种情况下,只有你放在detail bands才会出现,但是它会出现很多次,不是我们想要的。将它设置为report就是在报表数据配置好之后进行更新,再次预览

第三部分:做好了这一步之后,对于可以连接数据库的人来说已经够了,但是如果想要通过web动态生成客户想要的报表呢,那么我们还是要通过网络连接数据库,之后再动态我们需要的模板

我使用Myeclipse+tomcat做的网站

package com.mySqlsource;

import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.sql.Connection;

import javax.servlet.ServletException;
import javax.servlet.http.*;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.util.JRLoader;

public class MySqlSource extends HttpServlet{


	public void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		doPost(req, resp);
	}


	public  void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		try{
			String root_path=this.getServletContext().getRealPath("/");
			root_path=root_path.replace("\\", "/");
			String file_path=root_path+"chart/test_char.jasper";
		
			Database data=new Database();	
			Connection con=data.getConnection();
			JasperReport report= (JasperReport)JRLoader.loadObject(file_path);
			JasperPrint print=JasperFillManager.fillReport(report, null, con);
			data.closeConnection(con);
			
			  OutputStream ouputStream = resp.getOutputStream();  
		        resp.setContentType("application/pdf");
		        resp.setCharacterEncoding("UTF-8");  
		        resp.setHeader("Content-Disposition", "attachment; filename=\""+ URLEncoder.encode("PDF报表", "UTF-8") + ".pdf\"");  
		            	
		        // 使用JRPdfExproter导出器导出pdf  
		        JRPdfExporter exporter = new JRPdfExporter();  
		        exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
		        exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);  
		        exporter.exportReport();
		        
		        
		        ouputStream.close();  
			
		}catch(Exception e){
			e.printStackTrace();
			
		}
	}
	
}
文件列表

test_char.jasper(本来想是test_chart.jasper后来发现创建时候少打了一个字母委屈)是iReport预览编译之后生成的,在你的创建目录中找得到

代码很简单,关键的几个函数:

JasperReport report= (JasperReport)JRLoader.loadObject(file_path);
JasperPrint print=JasperFillManager.fillReport(report, null, con);
<pre name="code" class="html"> JRPdfExporter exporter = new JRPdfExporter();  
exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);  
这几个函数在之前的文章中也提到过,所以不再啰嗦。
特别注意:要将jasperreport的lib文件最好是都放到web项目的WEB-INF/lib目录下,生的报错
如果需要源码,留邮箱,希望能共同探讨

 









相关文章:

  • iReport+jasperreport创建子表的几种方式(2)
  • Jasperreports导出PDF、web上html的几个实用连接
  • 关于Unity3D中的UnitySendMessage方法的使用!!!
  • Unity3D如何读取保存XML,以及用U3D内置方式保存文件
  • unity3D调用外接摄像头,保存图片、不使用截屏方式
  • Unity3D中Find的用法
  • Unity3D中世界坐标转换到NGUI坐标
  • Window8.1+VS2013+Python+cocos2d-x-3.2
  • Java环境配置好之后,cnd窗口Java可以执行,但是Javac不能执行
  • cocos2d-x import org.cocos2dx.lib cannot be resolved
  • C#字符串处理:裁剪,替换,移除
  • NGUI 创建自定义按钮并添加按钮响应
  • Metaio中关于镜像问题
  • Unity3D+Arduino控制LED灯泡
  • 【好程序员训练营】Java线程学习
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • CentOS7简单部署NFS
  • Debian下无root权限使用Python访问Oracle
  • django开发-定时任务的使用
  • github从入门到放弃(1)
  • JS+CSS实现数字滚动
  • js操作时间(持续更新)
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • Node + FFmpeg 实现Canvas动画导出视频
  • PAT A1092
  • Promise面试题,控制异步流程
  • Python 基础起步 (十) 什么叫函数?
  • React系列之 Redux 架构模式
  • SQLServer插入数据
  • 高度不固定时垂直居中
  • 回顾 Swift 多平台移植进度 #2
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 简单实现一个textarea自适应高度
  • 提醒我喝水chrome插件开发指南
  • 一起参Ember.js讨论、问答社区。
  • PostgreSQL之连接数修改
  • ​【已解决】npm install​卡主不动的情况
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #预处理和函数的对比以及条件编译
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (1)(1.13) SiK无线电高级配置(五)
  • (4)logging(日志模块)
  • (pojstep1.1.2)2654(直叙式模拟)
  • (动态规划)5. 最长回文子串 java解决
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (三)模仿学习-Action数据的模仿
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转)原始图像数据和PDF中的图像数据
  • 、写入Shellcode到注册表上线
  • .NET BackgroundWorker
  • .Net MVC + EF搭建学生管理系统
  • .net的socket示例
  • .Net中间语言BeforeFieldInit
  • .Net转前端开发-启航篇,如何定制博客园主题