zoukankan      html  css  js  c++  java
  • Uploadify上传Excel到数据库

    前两章简单的介绍了Uploadify上传插件的基本使用和相关的属性说明。这一章结合Uploadify+ssh框架+jquery实现Excel上传并保存到数据库。

            以前写的这篇文章 Jqgrid demo-史上最强大,没有之一 已经能够对学生增删改查了,为什么还要通过这种方式来新增数据呢?想想也知道的,通过以前的方式新增数据效率非常慢。维护较少的数据还好点。如果一次性维护几百条、几千条数据比较多,那还是够呛。通过EXCEL上传数据批量新增即简单又不费事。
            demo只是引导大家如何去做,漏洞也是有的,至于具体的细节还需要各位自己把控。为了方便起见,还是以原来的维护学生信息为原型。实现思路:前台通过Uploadify插件上传Excel数据,后台接收到数据后通过POI解析数据并将数据持久化。
            如果你对Uploadify插件还不了解,可以参考我之前写的有关的博文。值得一提的是,在Uploadify的属性里面新增了两个属性:fileTypeDesc和fileTypeExts,通过这两个属性来限制上传文件的类型。别的就没什么了。
            ACTION中接收上传的EXCEL文件并解析,然后调用service层的方法新增到数据库中。关键代码如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    public class UploadAction {
        private File uploadFile;// 封装文件属性
        private String uploadFileFileName;// 文件名称
        private String msg;
        private StudentService studentService;
     
        public String upload() {
            try {
                String extName = "";
                String newFileName = "";
                // 设置传入的文件的编码
                HttpServletResponse response = ServletActionContext.getResponse();
                response.setCharacterEncoding("utf-8");
                // 服务器目录
                String targetDirectory = ServletActionContext.getServletContext()
                        .getRealPath("/upload");
                // 获取扩展名
                if (uploadFileFileName.lastIndexOf(".") >= 0) {
                    extName = uploadFileFileName.substring(uploadFileFileName
                            .lastIndexOf("."));
                }
                // 设置上传文件的新文件名
                String nowTime = new SimpleDateFormat("yyyymmddHHmmss")
                        .format(new Date());// 当前时间
                newFileName = nowTime + extName;
                // 生成上传的文件对象
                File targetFile = new File(targetDirectory, newFileName);
                // 文件已经存在删除原有文件
                if (targetFile.exists()) {
                    targetFile.delete();
                }
                // 复制file对象上传
                FileUtils.copyFile(uploadFile, targetFile);
                // 上传数据到数据库
                msg = studentService.doUploadStudentData(targetFile);
                // 删除上传数据
                targetFile.delete();
     
            } catch (Exception e) {
                e.printStackTrace();
                msg = "上传出现异常!";
            }
            return "success_upload";
        }
            doUploadStudentData方法:解析excel并调用新增方法,POI解析excel的代码在网上实在太多了。还是贴出来吧。关键代码:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    public String doUploadStudentData(File file) {
            Workbook wb = null;
            Sheet sheet = null;
            String value = null;
            Row row = null;// 表格行
            Student stu = null;
            String msg = null;// 返回消息
            int count = 0;// 成功上传条数
            try {
                // 将文件转成文件输入流
                InputStream is = new FileInputStream(file);
                // 判断Excel版本
                if (file.getName().toUpperCase().endsWith(".XLSX")) {
                    wb = new XSSFWorkbook(is);// Excel 2007
                } else {
                    wb = new HSSFWorkbook(is);// Excel 2003
                }
                FormulaEvaluator formulaEvaluator = wb.getCreationHelper()
                        .createFormulaEvaluator();// 解析公式结果
                // 获得第一个表格页
                sheet = wb.getSheetAt(0);
                System.out.println(sheet.getLastRowNum() + "记录长度");
                // 遍历数据
                for (int j = 1; j <= sheet.getLastRowNum(); j++) {
                    stu = new Student();
                    // 获取某一行
                    row = sheet.getRow(j);
                    stu.setId(row.getRowNum());
                    // 姓名
                    value = ExcelUtil.getValue(row.getCell(0), formulaEvaluator);
                    if (StringUtils.isNotBlank(value)) {
                        stu.setName(value);
                    }
                    // 年龄
                    value = ExcelUtil.getValue(row.getCell(1), formulaEvaluator);
                    if (StringUtils.isNotBlank(value)) {
                        stu.setAge(value.indexOf(value));
                    }
                    // 性别
                    value = ExcelUtil.getValue(row.getCell(2), formulaEvaluator);
                    if (StringUtils.isNotBlank(value)) {
                        stu.setSex(value);
                    }
                    // 家庭住址
                    value = ExcelUtil.getValue(row.getCell(3), formulaEvaluator);
                    if (StringUtils.isNotBlank(value)) {
                        stu.setAddress(value);
                    }
                    // 联系方式
                    value = ExcelUtil.getValue(row.getCell(4), formulaEvaluator);
                    if (StringUtils.isNotBlank(value)) {
                        stu.setPhone(value.indexOf(value));
                    }
                    // 兴趣
                    value = ExcelUtil.getValue(row.getCell(5), formulaEvaluator);
                    if (StringUtils.isNotBlank(value)) {
                        stu.setLikedo(value);
                    }
                    count++;
                    this.studentDao.createOrUpdate(stu);
     
                }
                msg = "数据上传成功,一共上传" + count + "条!";
            } catch (Exception e) {
                e.printStackTrace();
                msg = e.getMessage();
            }
            return msg;
        }
            getValue方法主要是判断单元格数据的类型,就不贴出来了哈。如果想弄明白,可以去我的百度网盘下载,地址在最下方。用两张图片说明问题吧。
            我先把数据库的数据全部删掉。如:
    up1
            启动项目,找到上传的EXCEL。点击上传按钮,提示上传成功。如:
    up2
            重新查询数据库,EXCEL中的数据全部都添加到数据库了。方便吧。
    up3
           由于时间仓促,没有把demo做的完美,希望各位谅解。代码毕竟枯燥。直接拿去用吧,地址:明天更新,百度网盘太慢了。

    原创文章,转载请注明: 转载自java开发者

    本文链接地址: Uploadify上传Excel到数据库

  • 相关阅读:
    基于VMWare配置VxWorks开发环境
    Go 方法、接口
    cgo 和 Go 语言是两码事
    MFC的回调函数
    go语言将函数作为参数传递
    nginx源码学习资源
    PYTHON 自动化运维
    LVS中文站点
    MS SQL SERVER 书BOOK
    桦仔------分享一下我研究SQLSERVER以来收集的笔记
  • 原文地址:https://www.cnblogs.com/hongzai/p/3199309.html
Copyright © 2011-2022 走看看