前两章简单的介绍了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方法主要是判断单元格数据的类型,就不贴出来了哈。如果想弄明白,可以去我的百度网盘下载,地址在最下方。用两张图片说明问题吧。
        我先把数据库的数据全部删掉。如:
        启动项目,找到上传的EXCEL。点击上传按钮,提示上传成功。如:
        重新查询数据库,EXCEL中的数据全部都添加到数据库了。方便吧。
       由于时间仓促,没有把demo做的完美,希望各位谅解。代码毕竟枯燥。直接拿去用吧,地址:明天更新,百度网盘太慢了。

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

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

Uploadify上传Excel到数据库的更多相关文章

  1. sql server使用sql语句上传Excel到数据库

    USE pro GO SELECT  * INTO   temp_budget_price@201704170950 FROM    OPENDATASOURCE('Microsoft.Jet.OLE ...

  2. 上传excel数据到数据库中

    上传excel表格数据到数据库 导入固定路径下的excel数据到数据库 <form id="disposeFlightDataForm" action="../up ...

  3. postman上传excel,java后台读取excel生成到指定位置进行备份,并且把excel中的数据添加到数据库

    最近要做个前端网页上传excel,数据直接添加到数据库的功能..在此写个读取excel的demo. 首先新建springboot的web项目 导包,读取excel可以用poi也可以用jxl,这里本文用 ...

  4. Django上传excel表格并将数据写入数据库

    前言: 最近公司领导要统计技术部门在各个业务条线花费的工时百分比,而 jira 当前的 Tempo 插件只能统计个人工时.于是就写了个报表工具,将 jira 中导出的个人工时excel表格 导入数据库 ...

  5. jsp+servlet上传excel并将数据导入到数据库表的实现方法

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  6. 使用ocupload和POI一键上传Excel并解析导入数据库

    使用的工具如下:  JQuery ocupload jquery.ocupload-1.1.2.js Apache POI poi-3.9.jar 如果是Maven项目添加依赖如下: <depe ...

  7. Uploadify 上传文件插件详解

    Uploadify 上传文件插件详解 Uploadify是JQuery的一个上传插件,实现的效果非常不错,带进度显示.不过官方提供的实例时php版本的,本文将详细介绍Uploadify在Aspnet中 ...

  8. java的poi技术下载Excel模板上传Excel读取Excel中内容(SSM框架)

    使用到的jar包 JSP: client.jsp <%@ page language="java" contentType="text/html; charset= ...

  9. jquery的uploadify上传jsp+servlet

    1.准备材料:下载jquery.uploadify上传js   注意:这个上传在firefox下会出现问题如果你在项目中加了拦截器,因为session会丢失,所以你可以传参的时候带上你所需要的条件,在 ...

随机推荐

  1. Javacript中(function(){})() 与 (function(){}()) 区别 {转}

    这个问题可以从不同的角度来看,但从结果上来说 :他们是一样的.首先,如果从AST(抽象语法树)的角度来看,两者的AST是一模一样的,最终结果都是一次函数调用.因此,就解析器产生的结果论而言,两者是没有 ...

  2. eclipse编译项目jar,git管理代码

    2015-3-10 settings.xml文件: <localRepository>C:\Users\xxx\.m2\repository</localRepository> ...

  3. 历代诗词咏宁夏注释3----蔡升元:<题大清渠>

    题大清渠 蔡升元 为怜□□□□□,□□□□□□□. □□□□沙碛里,凿开峡口贺兰旁. 支分九堡通沟浍,鼎峙三渠并汉唐. 作吏尽如君任事,不难到处乐丰穰. 两渠中划大清渠,畚筑无劳民力纾.[1] 心画万 ...

  4. NetCore第一步:千里之行 始于环境构筑

    今年的6月28号,微软发布了一个正式版本 NetCore.发布的同时,也同时发布了CoreStudio. 这个激动人心的时刻,让跨平台已经不再是什么神话. 让我们一起来开始Core的开发之旅吧. 万事 ...

  5. UVA 1362 Exploring Pyramids 区间DP

    Archaeologists have discovered a new set of hidden caves in one of the Egyptian pyramids. The decryp ...

  6. cache写策略

    cache写策略 Write Through (完全写入) CPU向cache写入数据时,同时向memory也写一份,使cache和memory的数据保持一致.优点是简单,缺点是每次都要访问memor ...

  7. 最简单的jdbc程序

    package cn.ytu.mybatis.jdbc;   import java.sql.Connection; import java.sql.DriverManager; import jav ...

  8. React属性和状态对比

    一.相似点 二.区别 三.如何区分 PS:所有的数据都可以变成属性

  9. Samba 服务使用的端口和协议(是一组TCP UDP协议的组合,主要使用CIFS协议,有一个Java例子)

    Samba服务所使用的端口和协议: 1)Port 137 (UDP) - NetBIOS 名字服务 : nmbd 2)Port 138 (UDP) - NetBIOS 数据报服务 3)Port 139 ...

  10. 转载网易博客:整理各大网站让网站变灰的css代码

    2013-07-21 15:06:47 北京时间2013年4月20日8时02分四川省雅安市芦山县(北纬30.3,东经103.0)发生7.0级地震.震源深度13公里.各大网站将其网站变灰,本人整理了下部 ...