Uploadify上传Excel到数据库

本文介绍如何利用Uploadify插件结合SSH框架和jQuery上传Excel文件,并将其保存到数据库中。此方法适用于批量新增数据,提高效率,特别适合处理大量数据。通过上传Excel文件,后台使用POI解析数据并进行持久化操作,简化数据导入流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  前两章简单的介绍了Uploadify上传插件的基本使用和相关的属性说明。这一章结合Uploadify+ssh框架+jquery实现Excel上传并保存到数据库。
        以前写的这篇文章  Jqgrid demo-史上最强大,没有之一 已经能够对学生增删改查了,为什么还要通过这种方式来新增数据呢?想想也知道的,通过以前的方式新增数据效率非常慢。维护较少的数据还好点。如果一次性维护几百条、几千条数据比较多,那还是够呛。通过EXCEL上传数据批量新增即简单又不费事。
        demo只是引导大家如何去做,漏洞也是有的,至于具体的细节还需要各位自己把控。为了方便起见,还是以原来的维护学生信息为原型。实现思路: 前台通过Uploadify插件上传Excel数据,后台接收到数据后通过POI解析数据并将数据持久化。
        如果你对Uploadify插件还不了解,可以参考我之前写的有关的博文。值得一提的是,在Uploadify的属性里面新增了两个属性:fileTypeDesc和fileTypeExts,通过这两个属性来限制上传文件的类型。别的就没什么了。
        ACTION中接收上传的EXCEL文件并解析,然后调用service层的方法新增到数据库中。关键代码如下:
 
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的代码在网上实在太多了。还是贴出来吧。关键代码:
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做的完美,希望各位谅解。代码毕竟枯燥。直接拿去用吧,地址: http://pan.baidu.com/share/link?shareid=1964817345&uk=587859240

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值