针对从数据库取大量数据导出到Excel的记录摘要
来源:互联网 发布:淘宝发布宝贝规则 编辑:程序博客网 时间:2024/04/29 14:39
鉴于公司作为刚创业的小公司,没有技术大牛,什么逻辑业务都要靠自己摸索查询,记录下来作为自己的成长经历。
由于之前项目需求导出数据不多,大多在1万条之内,因此直接将前台取到的数据用get或post方式发送到后台,直接写入Excel。
如今需要提供原始数据的导出,原始数据是每隔40秒就往数据库中插入一条数据,仍用之前的方式势必导致浏览器响应奔溃,于是想到的思路是:用户点击‘下载’链接的时候,用ajax链接到后台,web.xml拦截此路径,在servlet中将数据从数据库全部取出写入Excel,存放到项目工程中新建的文件夹中,前台用<a>标签链接到此Excel资源。
1、前台链接a标签
<a href='#' id='originalExport' onClick='return originalExport(this)'>导出数据</a>
2、用ajax链接到后台,将需要的数据绑定一起传递
function originalExport(obj){var store = $("#storeOriginal option:selected").text();var sID = $('#storeOriginal').val();var accID = '';if($("#accOriginal").length > 0){accID = $("#accOriginal").val();}$.ajax({type:"post",async:false, //为防止还未完Excel结果就响应回来,采用同步请求 url:"./js/exportOriginalData",data:{store:store,sID:sID,accID:accID,startTime:sdate,endTime:edate},success:function(data){obj.href = "/tts-dunan/fileTemp/"+data+""; //链接到新建的文件夹中的生成的Excel文件}}); return true;}
3、web.xml拦截路径
<servlet> <servlet-name>exportOriginal</servlet-name> <servlet-class>com.tusung.tts.comm.tool.OriginalDataExport</servlet-class> </servlet><servlet-mapping> <servlet-name>exportOriginal</servlet-name> <url-pattern>/js/exportOriginalData</url-pattern> </servlet-mapping>
4、servlet中处理业务
public void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {req.setCharacterEncoding("UTF-8");//取到原始数据集合String store = req.getParameter("store");store = URLDecoder.decode(store, "UTF-8");String sID = req.getParameter("sID");String accID = req.getParameter("accID");int startTime = Integer.parseInt(req.getParameter("startTime"));int endTime = Integer.parseInt(req.getParameter("endTime"));String accountID = StringTools.isBlank(accID)?(String)req.getSession().getAttribute("account"):accID;List<EventDataExt> ede_list = new ArrayList<EventDataExt>();ede_list = JDBCUtil.getOriginalDataById(accountID, sID, startTime, endTime);//指定存放路径String fileRealPath = ""; //存放到项目路径下的fileTemp文件夹下 String savePath = this.getServletConfig().getServletContext().getRealPath("/") + "fileTemp\\"; File file = new File(savePath); if (!file.isDirectory()) { file.mkdirs(); } //写入文件 try{ resp.setContentType("application/vnd.ms-excel");//保证不乱码 SimpleDateFormat df=new SimpleDateFormat("yyyyMMddHHmmss"); String time = df.format(new Date()); String fileName=time+"导出原始数据.xls"; fileRealPath = savePath + fileName; WritableWorkbook wwb = Workbook.createWorkbook(new File(fileRealPath)); WritableSheet ws = wwb.createSheet("原始数据",0); ws.mergeCells(0,0,1,0);//合并单元格 //向合并单元格写数据 WritableFont font = new WritableFont(WritableFont.TIMES, 12 ,WritableFont.BOLD); WritableCellFormat format = new WritableCellFormat(font); format.setAlignment(jxl.format.Alignment.CENTRE); //单独设置居中显示 WritableFont wfont = new WritableFont(WritableFont.ARIAL, 10); WritableCellFormat wformat = new WritableCellFormat(wfont); wformat.setAlignment(jxl.format.Alignment.CENTRE); wformat.setBorder(Border.ALL,BorderLineStyle.THIN); Label label = new Label(0,0,store+"原始数据",format); ws.addCell(label); Blank b = new Blank(0,1); ws.addCell(b); b = new Blank(0,2); ws.addCell(b); CellView cellView = new CellView(); cellView.setAutosize(true); label = new Label(0,1,"日期",wformat);//列、行、内容、格式 ws.addCell(label); ws.setColumnView(1,12); label = new Label(1,1,"能耗(度)",wformat); ws.addCell(label); int count = 2; Number labelN = null; for(int i=0;i<ede_list.size();i++){ EventDataExt ede = (EventDataExt) ede_list.get(i); double energy = ede.getEnergy(); long energy_time = ede.getTimestamp(); df=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); String sd = df.format(new Date((energy_time*1000))); ws.setColumnView(0,cellView); label = new Label(0,count,sd,wformat); ws.addCell(label); labelN = new Number(1,count,energy,wformat); ws.addCell(labelN); count++; } resp.setCharacterEncoding("UTF-8"); resp.getWriter().print(fileName);//将文件名字送回页面 wwb.write(); wwb.close(); }catch(Exception e){ e.printStackTrace(); }}
最后导出的Excel如图:
遇到的问题:
由于项目后台是采用Springmvc,开始在servlet直接使用注解方式调用dao层查询数据的时候,产生异常:
javax.naming.NamingException: Cannot create resource instance
在google搜索发现应当是Tomcat7.0.35之前一个纰漏,原文链接如下:https://issues.apache.org/bugzilla/show_bug.cgi?id=54448
0 0
- 针对从数据库取大量数据导出到Excel的记录摘要
- 从数据库导出大量数据记录保存到文件的方法和实例
- 从数据库导出数据到Excel
- JSP从数据库导出数据到Excel下载的实现
- 从数据库导出数据到EXCEL换行的问题解决方法
- 关于读取Excel文件数据到数据库,以及从数据库导出数据到Excel的例子
- 导出大量数据到Excel的一种方式
- java中导出大量数据到Excel的一种方法
- 导出大量数据到Excel的一种方式
- 使用poi导出大量数据到excel遇到的问题
- 导出大量数据到Excel的一种方式
- PHP 将大量数据导出到 Excel 的方法
- PHP 将大量数据导出到 Excel 的方法
- PHP 将大量数据导出到 Excel 的问题
- Sybase数据库大量数据导出Excel
- R第七问 从数据库取数分别导出到不同的excel(根据名称)
- 导出从数据库中查询到的所有的数据到Excel中
- 导出从数据库中查询到的所有的数据到Excel中
- MFC CButtonST按钮增强类使用
- URAL 1010 Discrete Function
- Bzoj 1803 spoj qtree3 主席树
- python 装饰器
- csu1415 Cheapest Route
- 针对从数据库取大量数据导出到Excel的记录摘要
- 第12届北师大校赛热身赛第二场 B起床的烦恼
- 嵌入式 在kernel中增加自己的驱动的顺序
- 背包算法的实现
- Maven学习——修改Maven的本地仓库路径
- C 语言中的字符屏幕函数
- 2014年实习生招聘之爱立信上海研发中心实习生招聘面试—2014/04/18
- cassandra关于集合类型的操作
- git submodule 学习笔记(一)