zoukankan      html  css  js  c++  java
  • 上传excel文件,读取内容,增加事务写入数据库

    package com.inspur.icpmg.itss.asset.dao.impl;
    
    import com.inspur.icpmg.util.DBHelper;
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.usermodel.Workbook;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    import org.springframework.transaction.TransactionStatus;
    import org.springframework.transaction.support.DefaultTransactionDefinition;
    
    import java.io.*;
    
    /**
     * Create by wjup on 2019/5/31 17:00
     */
    public class ImportExcel {
        /**
         * 上传的excel文件和文件名称
         *
         * form表单上传框name为acUpload
         * acUploadFileName:xxFileName格式自动获取上传的文件名
         *
         */
        private File acUpload;
        private String acUploadFileName;
    
        public String getAcUploadFileName() {
            return acUploadFileName;
        }
        public void setAcUploadFileName(String acUploadFileName) {
            this.acUploadFileName = acUploadFileName;
        }
        public File getAcUpload() {
            return acUpload;
        }
        public void setAcUpload(File acUpload) {
            this.acUpload = acUpload;
        }
        private static JdbcTemplate jdbcTemplate = new JdbcTemplate(DBHelper.getDataSource());// 数据库连接池
    
        public void file() throws IOException {
            InputStream in = new FileInputStream(acUpload);
            if (acUploadFileName.endsWith("xls") || acUploadFileName.endsWith("xlsx")) {
                Workbook wb = null;
                if (acUploadFileName.endsWith("xls")) {
                    //2003
                    wb = new HSSFWorkbook(in);
                } else if (acUploadFileName.endsWith("xlsx")) {
                    //2007
                    wb = new XSSFWorkbook(in);
                }
                // 获取excel表第一张sheet页
                Sheet sheet1 = wb.getSheetAt(0);
                importExcel(sheet1);
            }
        }
    
    
        public void importExcel(Sheet sheet) {
            //添加事务
            DefaultTransactionDefinition def = new DefaultTransactionDefinition();
            DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(jdbcTemplate.getDataSource());
            TransactionStatus status = transactionManager.getTransaction(def);
            Boolean Iscommit = false;
            String name = "";
    
            for (Row row : sheet) {
                if (row.getRowNum() >= 1) {
                    boolean flag = false;
                    for (int c = row.getFirstCellNum(); c < row.getLastCellNum(); c++) {
                        if (row.getCell(c) != null && row.getCell(c).getCellType() != HSSFCell.CELL_TYPE_BLANK) {
                            flag = true;
                        }
                    }
                    if (flag) {
                        if (row.getCell(0) != null) {
                            name = row.getCell(0).toString().trim();
                        } else {
                            String msg = "不能为空";
                            Iscommit = true;
                        }
                    }
                }
            }
    
            String sql = "insert into user values("+name+")";
    
            if (Iscommit) {
                transactionManager.rollback(status);
            } else {
                try {
                    // 出现异常回滚事务
                    jdbcTemplate.batchUpdate(sql);
                } catch (Exception ex) {
                    transactionManager.rollback(status);
                } finally {
                    transactionManager.commit(status);
                }
            }
        }
    
    
    }
    
  • 相关阅读:
    介绍一款jquery ui组件gijgo(含tree树状结构、grid表格),特点:简易、文档全清晰易懂、示例代码
    【未完待续】API接口
    表单中Readonly和Disabled的区别:readonly在get和post可传值到后端,disabled不可
    Newtonsoft.Json 转换DateTime类型为字符串时,串内部会有一个T。解决方案
    一种历史详细记录表,完整实现:CommonOperateLog 详细记录某用户、某时间、对某表、某主键、某字段的修改(新旧值
    js return falsee.preventDefault() 以及session
    bootstrape学习
    Redis的PHP操作手册
    PHP表单常用正则表达式(URL、HTTP、手机、邮箱等)
    大型网站架构演化
  • 原文地址:https://www.cnblogs.com/wjup/p/11041284.html
Copyright © 2011-2022 走看看