Java报表-数据可视化

报表 = 多样的格式 + 动态的数据

一、Java处理Excel

1、JXL

只能处理Excel2003版本以前的

2、POI

  • apache的项目;
  • 用模板的方式导出Excel,提高处理复杂Excel的效率;
  • 自定义导出引擎,在Excel模板标记实体字段,把配置做到Excel中来减少代码的改动;

百万数据的导出

思路:
新版Excel的内部结构是XML,其解析方式有dom4j和sax。百万数据的导出适合用sax的解析方式,边扫描边解析,防止内存的大量消耗。

不能使用模板,不能使用太多样式。

案例:
1、用存储过程向表中插入500万条数据。

#1、创建表
CREATE TABLE `tb_user2` (
  `id` bigint(20) NOT NULL  COMMENT '用户ID',
  `user_name` varchar(100) DEFAULT NULL COMMENT '姓名',
  `phone` varchar(15) DEFAULT NULL COMMENT '手机号',
  `province` varchar(50) DEFAULT NULL COMMENT '省份',
  `city` varchar(50) DEFAULT NULL COMMENT '城市',
  `salary` int(10) DEFAULT NULL,
  `hire_date` datetime DEFAULT NULL COMMENT '入职日期',
  `dept_id` bigint(20) DEFAULT NULL COMMENT '部门编号',
  `birthday` datetime DEFAULT NULL COMMENT '出生日期',
  `photo` varchar(200) DEFAULT NULL COMMENT '照片路径',
  `address` varchar(300) DEFAULT NULL COMMENT '现在住址'
  
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

#2、创建存储过程
DELIMITER $$    -- 重新定义“;”分号
DROP PROCEDURE IF EXISTS test_insert $$   -- 如果有test_insert这个存储过程就删除
CREATE PROCEDURE test_insert()			  -- 创建存储过程

BEGIN
	DECLARE n int DEFAULT 1;				    -- 定义变量n=1
	SET AUTOCOMMIT=0;						    -- 取消自动提交
	
		while n <= 5000000 do					
			INSERT INTO `tb_user2` VALUES ( n, CONCAT('测试', n), '13800000001', '北京市', '北京市', '11000', '2001-03-01 21:18:29', '1', '1981-03-02 00:00:00', '\\static\\user_photos\\1.jpg', '北京市西城区宣武大街1号院');
			SET n=n+1;
		END while;
		COMMIT;
END $$

#3、开始执行 插入500W数据大概需要200至300秒左右
CALL test_insert();			     
 

2、用POI导出Excel。规定每个工作表只存100万条数据,因此需要5个工作表。

百万数据的导入

思路:
用sax的解析方式,否则会堆内存溢出(OutOfMemoryError)。
实现:
实现SheetContentsHandler接口。

3、EasyPOI

3.1 介绍:
可以简化POI的代码量,但不能替代POI。

曾今在项目中用过EasyPOI,需求是把销售台账导出到excel(根据日期区间)。
淄博项目Git地址

  • EasyPOI的案例导出有bug,未找到问题所在。
    数据库的photo字段不能为\static\user_photos\11.jpg

3.2 应用场景
数据导出
数据导入
详细数据模板导出

二、图形报表

ECharts

百度前端团队开发的基于JS的组件,底层依赖轻量级的矢量图形库ZRender,可高度个性化定制。目前捐给了Apache。
案例的Git地址

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值