JAVA使用POI如何导出百万级别数据,防止内存溢出

      以前我们数据库中存在大量的数据,我们要查询,怎么办?我们在没有经过设计的时候是这样来处理的,先写一个集合,然后执行jdbc,将返回的结果赋值给list,然后再返回到页面上,但是当数据量大的时候,就会出现数据无法返回,内存溢出的情况,于是我们在有限的时间和空间下,通过分页将数据一页一页的显示出来,这样可以避免了大数据量数据对内存的占用,也提高了用户的体验,在我们要导出的百万数据也是一个道理,内存突发性占用,我们可以限制导出数据所占用的内存,这里我先建立一个list容器,list中开辟10000行的存储空间,每次存储10000行,用完了将内容清空,然后重复利用,这样就可以有效控制内存,所以我们的设计思路就基本形成了,所以分页数据导出共有以下3个步骤:

1、求数据库中待导出数据的行数

2、根据行数求数据提取次数

3、按次数将数据写入文件

  注:当数据量超过百万必须拆分到多个工作表,或者多个工作簿中才能实现。因为一个sheet最多行数为1048576。

附上代码(工作中实例)

     

	@RequestMapping("/exportmq")
	public String exportmq(HttpServletResponse response, HttpServletRequest req) throws Exception {
		long startTime = System.currentTimeMillis();
		logger.info("激活码导出开始:" + TimeUtil.getDateToString(new Date(), "yyyy-MM-dd HH:mm:ss"));
		setResponseHeader(response, "card.xlsx");
		List<Map<String, Object>> list1 = new ArrayList<>();
		JdbcTemplate template = JdbcTemplateManager.getTemplate();
		String log_id = req.getParameter("log_id");
		String card_code = req.getParameter("card_code");
		String role_id = req.getParameter("role_id");
		String server_id = req.getParameter("server_id");
		String user_name = req.getParameter("user
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值