一,把数据库的内容导出成excel文件(POI)
@RequestMapping(params="method=downXls") public voiddownXls(HttpServletRequest request , HttpServletResponse response) throws ServletException, IOException, BiffException{ //得到数据里面的内容,可以确定要导出哪些数据,要导出哪些字段,要导入什么信息 List<Emps> empList = empService.getAllEmps(); HSSFWorkbook wb = new HSSFWorkbook();//新建一个workBook,这里就相当于一个excel文件 HSSFSheet sheet =wb.createSheet();//创建一个工作簿 //设置每列的宽度 sheet.setColumnWidth(0, 2000); sheet.setColumnWidth(1, 4000); sheet.setColumnWidth(2, 5000); //字体 HSSFFont font = workbook.createFont(); font.setBoldweight((short)1000); font.setFontName("隶书"); font.setFontHeightInPoints((short)15); //设置字体大小 //单元格样式 HSSFCellStyle cellStyle = workbook.createCellStyle(); cellStyle.setFont(font); //给每个单元格指定样式以及内容 HSSFCell cell0 = titleRow.createCell(0); cell0.setCellStyle(cellStyle); cell0.setCellValue(new HSSFRichTextString("职工号")); HSSFCell cell1 = titleRow.createCell(1); cell1.setCellStyle(cellStyle); cell1.setCellValue(new HSSFRichTextString("职工姓名")); HSSFCell cell2 = titleRow.createCell(2); cell2.setCellStyle(cellStyle); cell2.setCellValue(newHSSFRichTextString("部门名字")); int num = empList.size(); for(int i = 1 ; i< num ; i++){ HSSFRow row =sheet.createRow(i);//创建行 row.createCell((short)0).setCellValue(newHSSFRichTextString(empList.get(i-1).getEmpId()+""));//设置没一行每个单元格的值 row.createCell((short)1).setCellValue(newHSSFRichTextString(empList.get(i-1).getEmpName())); row.createCell((short)2).setCellValue(newHSSFRichTextString(empList.get(i-1).getDep().getDepName())); } //增加一个最后一行 HSSFRow row = sheet.createRow(num+1); HSSFCell footCell = row.createCell(0); footCell.setCellValue(new HSSFRichTextString("合计:")); //设置最后一行的样式 HSSFCellStyle style = workbook.createCellStyle(); style.setAlignment(HSSFCellStyle.ALIGN_LEFT); //内容左对齐 footCell.setCellStyle(style); //合并单元格(第一个单元格的行数,第二个单元格的行数,第一个单元格的列,第二个单元格的列) sheet.addMergedRegion(newCellRangeAddress(num+1,num+1,0,2)); //导出成excel形式的,用流的形式下载的方式 response.addHeader("Content-Disposition", "attachment;filename=myFile.xls"); response.addHeader("Content-type", "application/vnd.ms-excel"); try{ OutputStream os =response.getOutputStream(); wb.write(os); os.close(); }catch(Exception e){ e.printStackTrace(); } }
二,把excel文件导入的数据库库(JXL)
@RequestMapping(params="method=upXls") public void upXls(HttpServletRequest request , HttpServletResponse response) throws ServletException, IOException, BiffException{ List<Book> bookList = new ArrayList<Book>(); File file = new File("D://book.xls");//找到要导入的excel文件 jxl.Workbook wb = Workbook.getWorkbook(file);//通过要导入的excel文件来生成一个workbook int sheetNum = wb.getSheets().length; for(int i = 0 ; i < sheetNum ; i++){ Sheet sheet = wb.getSheet(i); int rowNum = sheet.getRows(); //如果有标题列名的话,需要从第一行算起,不能包括第一行 for(int j = 1 ; j < rowNum ; j++){ //这里注意的是,sheet.getCell(列数,行数),不要把里面的参数搞反了 //因为在数据库的id的自动增长的,所以在excel的这一列序号不需要写进来 //String cellString1 = sheet.getCell(0, j).getContents(); String cellString2 = sheet.getCell(1, j).getContents(); String cellString3 = sheet.getCell(2, j).getContents(); //创建一个临时对象,而且用一个list来保存,然后到DAO层批量的插入 Book book = new Book(); book.setBname(cellString2); book.setBtype(Integer.parseInt(cellString3)); bookList.add(book); } try{ //在到曾批量插入的时候要考虑一个问题就是内存泄漏的问题 //因为save方法会加入到缓存中 bookService.insertIntoSQL(bookList); }catch (Exception e) { e.printStackTrace(); } showBooks(request, response); } } //在DAO层的批量增加 public void saveAll(List<Book> bookList){ final List<Book> finalBookList = bookList; getHibernateTemplate().execute(new HibernateCallback(){ public Object doInHibernate(Session session) throws HibernateException, SQLException { int num = finalBookList.size(); for(int i = 0 ; i < num ; i++){ save(finalBookList.get(i)); if(i%20==0){ session.flush(); session.clear(); } } session.close(); return null; } });
用命令行导入excel数据到数据库
首先要把excel另存为成 文本文件(制表符分隔)
mysql>load data local infile 'D:\data.txt' into table exceltomysql fields terminated by '\t';