使用POI将数据导入导出数据库。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yaoxiaoganggang/article/details/51762009
POI将数据导入导出数据库。(采用ssm框架)
1.前台列表的展示
<script type="text/javascript">

    //进行数据的全选
    function selectAll(){
        var ids=document.getElementsByName("id");
        for(var i=0;i<ids.length;i++){
            ids[i].checked=!ids[i].checked;
        }
    }

    function downLoad(){
        var ids=document.getElementsByName("id");
        var id="";
        for(var i=0;i<ids.length;i++){
            id+=ids[i].value+","
        }
        id=id.substring(0, id.length-1);
        if(confirm("确认下载吗?")){
            location.href="importExcel.action?ids="+id;
        }       

    }
</script>   

</head>
<body>
   <table border="1">
   <tr>
      <th><input type="button" value="下载" onclick="downLoad()"></th>
      <th>
          <form action="importMySql.action" enctype="multipart/form-data" method="post">
            <input type="file" name="uploadFile" id="uploadFile"/>
            <input type="submit" value="上传"/>
            <input type="reset" value="重置"/>          
          </form>
      </th>
   </tr>

       <tr>
           <th><input type="checkbox" onclick="selectAll()">全选</th>
           <th>ID</th>
           <th>姓名</th>
           <th>性别</th>
       </tr>
       <c:forEach items="${studentList}" var="stu">
         <tr>
           <td><input type="checkbox" name="id" value="${stu.id}"></td>
           <td>${stu.id}</td>
           <td>${stu.name}</td>
           <td>${stu.sex}</td>
         </tr> 
       </c:forEach>
   </table>
</body>

这里写图片描述


/**
     * @description:将数据库中的数据导出到excel
     * @author yaoxiaogang
     * @time 2016年6月20日
     */
    @RequestMapping("importExcel")
    public void ExportExcel(HttpServletResponse response,String ids) throws IOException{

        response.setContentType("application/vnd.ms-excel");
        //传递中文参数编码
        String codedFileName = java.net.URLEncoder.encode("中文","UTF-8");
        response.setHeader("content-disposition", ";filename=" + codedFileName + ".xls");

        List<Student> list = new ArrayList<Student>();

        //前台获取的数据ids
        String[] array = ids.split(",");

        for (int i = 0; i < array.length; i++) {
            Student stu = studentService.findById(Integer.valueOf(array[i]));
            list.add(stu);
        }

        //定义一个工作薄
        Workbook workbook = new HSSFWorkbook();
        // 创建一个sheet页
        Sheet sheet = workbook.createSheet("学生信息");
        // 创建一行
        Row row = sheet.createRow(0);
        // 在本行赋值以0开始
        row.createCell(0).setCellValue("学号");
        row.createCell(1).setCellValue("姓名");
        row.createCell(2).setCellValue("性别");
        //excel格式
        CellStyle cellStyle = workbook.createCellStyle();
        // 格式化日期
        cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy"));
        //遍历输出
        for (int i = 0; i <  list.size(); i++) {
            Student stu = list.get(i);
            row = sheet.createRow(i);
            row.createCell(0).setCellValue(stu.getId());
            row.createCell(1).setCellValue(stu.getName());
            row.createCell(2).setCellValue(stu.getSex());
        }
        OutputStream  out = response.getOutputStream();  
        workbook.write(out); 
        out.flush();  
        out.close(); 
    }

2.点击下载以后,数据库中的数据就导出到Excel表中。

这里写图片描述

3.在Excel表中多添加几条数据,将Excel表中的数据导入到数据库中。

这里写图片描述

/**
     * @description 将excel表中的数据导入到数据库中
     * @author yaoxiaogang
     * @time 2016年6月20日
     */
    @RequestMapping("importMySql")
    public String importMySql(@RequestParam MultipartFile uploadFile,HttpServletRequest request) throws IOException{
        //文件上传工具类
        UploadPicture upload = new UploadPicture();
        //获得上传文件
        File target = upload.upLoadFile(uploadFile, request);

        List <Student> slist = new ArrayList<Student>();

        excelFile = new FileInputStream(target);
        // 将上传的文件放入到工作薄中
        Workbook wb = new HSSFWorkbook(excelFile);
        // 获取sheet页
        Sheet sheetAt = wb.getSheetAt(0);
        // 获取行数
        int rowNum = sheetAt.getLastRowNum() + 1;

        for(int i=0;i<rowNum;i++){
            Student student = new Student();
            Row row = sheetAt.getRow(i);
            int lastCellNum = row.getLastCellNum();
            for(int j = 0;j < lastCellNum; j++){
                Cell cell = row.getCell(j);
                String cellValue = null;
                switch (cell.getCellType()) {
                case 0:
                    // 判断excel单元格内容的格式,并对其进行转换,转换成数据库里所存储的类型
                    cellValue = String.valueOf((int)cell.getNumericCellValue());
                    break;
                case 1:
                    cellValue = cell.getStringCellValue();
                    break;
                case 2:
                    cellValue = cell.getStringCellValue();
                    break;
                }

                switch (j) {
                case 1:
                    student.setName(cellValue);
                    break;

                case 2:
                    student.setSex(cellValue);
                    break;
            }
        }
            slist.add(student);
      }

      //往数据库中循环加入数据
      for (Student stu : slist) {
        studentService.insert(stu);
      }
        return "redirect:list.controller";
    }

此时数据库中就会多几条数据。

这里写图片描述

注意:在进行导入数据库时,需要一个文件上传工具类。

package com.baidu.dto;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.io.IOUtils;
import org.springframework.web.multipart.MultipartFile;
/**
 * @author yaoxiaogang
 * @description 文件上传工具类
 * @time 下午6:33:25 2016年6月20日
 */
public class UploadPicture {

    public File  upLoadFile(MultipartFile uploadFile,HttpServletRequest request) throws IOException{
        String img=null;
        MultipartFile file = uploadFile;
        @SuppressWarnings("unused")
        String uploadFileName = file.getOriginalFilename();

        InputStream isRef = file.getInputStream();

        String targetDir = request.getSession().getServletContext()
                .getRealPath("/upload");

        SimpleDateFormat sdf=new SimpleDateFormat("yyyyy_MM_dd_hh_mm_ss");
        String getDateString=sdf.format(new Date());
        String newFileName=""+getDateString+System.nanoTime();
        File targetFile = new File(targetDir,newFileName);
        FileOutputStream fosRef = new FileOutputStream(targetFile);
        IOUtils.copy(isRef, fosRef);

        return targetFile;
    }


}

//数据的导入导出就成功了!!

快捷键

  • 加粗 Ctrl + B
  • 斜体 Ctrl + I
  • 引用 Ctrl + Q
  • 插入链接 Ctrl + L
  • 插入代码 Ctrl + K
  • 插入图片 Ctrl + G
  • 提升标题 Ctrl + H
  • 有序列表 Ctrl + O
  • 无序列表 Ctrl + U
  • 横线 Ctrl + R
  • 撤销 Ctrl + Z
  • 重做 Ctrl + Y

Markdown及扩展

Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成格式丰富的HTML页面。 —— [ 维基百科 ]

使用简单的符号标识不同的标题,将某些文字标记为粗体或者斜体,创建一个链接等,详细语法参考帮助?。

本编辑器支持 Markdown Extra ,  扩展了很多好用的功能。具体请参考Github.

表格

Markdown Extra 表格语法:

项目 价格
Computer $1600
Phone $12
Pipe $1

可以使用冒号来定义对齐方式:

项目 价格 数量
Computer 1600 元 5
Phone 12 元 12
Pipe 1 元 234

定义列表

Markdown Extra 定义列表语法:
项目1
项目2
定义 A
定义 B
项目3
定义 C

定义 D

定义D内容

代码块

代码块语法遵循标准markdown代码,例如:

@requires_authorization
def somefunc(param1='', param2=0):
    '''A docstring'''
    if param1 > param2: # interesting
        print 'Greater'
    return (param2 - param1 + 1) or None
class SomeClass:
    pass
>>> message = '''interpreter
... prompt'''

脚注

生成一个脚注1.

目录

[TOC]来生成目录:

数学公式

使用MathJax渲染LaTex 数学公式,详见math.stackexchange.com.

  • 行内公式,数学公式为: Γ(n)=(n1)!nN
  • 块级公式:

x=b±b24ac2a

更多LaTex语法请参考 这儿.

UML 图:

可以渲染序列图:

Created with Raphaël 2.1.0 张三 张三 李四 李四 嘿,小四儿, 写博客了没? 李四愣了一下,说: 忙得吐血,哪有时间写。

或者流程图:

Created with Raphaël 2.1.0 开始 我的操作 确认? 结束 yes no
  • 关于 序列图 语法,参考 这儿,
  • 关于 流程图 语法,参考 这儿.

离线写博客

即使用户在没有网络的情况下,也可以通过本编辑器离线写博客(直接在曾经使用过的浏览器中输入write.blog.csdn.net/mdeditor即可。Markdown编辑器使用浏览器离线存储将内容保存在本地。

用户写博客的过程中,内容实时保存在浏览器缓存中,在用户关闭浏览器或者其它异常情况下,内容不会丢失。用户再次打开浏览器时,会显示上次用户正在编辑的没有发表的内容。

博客发表后,本地缓存将被删除。 

用户可以选择 把正在写的博客保存到服务器草稿箱,即使换浏览器或者清除缓存,内容也不会丢失。

注意:虽然浏览器存储大部分时候都比较可靠,但为了您的数据安全,在联网后,请务必及时发表或者保存到服务器草稿箱

浏览器兼容

  1. 目前,本编辑器对Chrome浏览器支持最为完整。建议大家使用较新版本的Chrome。
  2. IE9以下不支持
  3. IE9,10,11存在以下问题
    1. 不支持离线功能
    2. IE9不支持文件导入导出
    3. IE10不支持拖拽文件导入


  1. 这里是 脚注内容.

猜你喜欢

转载自blog.csdn.net/yaoxiaoganggang/article/details/51762009
今日推荐