上传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);
            }
        }
    }
}
上传excel文件,读取内容,增加事务写入数据库的更多相关文章
- Django框架(上传Excel文件并读取)
		博主今天整理下Django框架中上传Excel文件并读取 博主是要在管理平台中新增用例的维护功能,想着通过上传Excel文件来展示用例,下面是项目的路径图: 首先先建数据库模型 model.py 可以 ... 
- ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案  try.dot.net 的正确使用姿势  .Net NPOI 根据excel模板导出excel、直接生成excel  .Net NPOI 上传excel文件、提交后台获取excel里的数据
		ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 ASP.NET Core 从2.2版本开始,采用了一个新的名为Endpoint的路由方案,与原来的方案在使用上差别不 ... 
- java上传excel文件及解析
		java上传excel文件及解析 CreateTime--2018年3月5日16:25:14 Author:Marydon 一.准备工作 1.1 文件上传插件:swfupload: 1.2 文件上 ... 
- jmert中如何测试上传文件接口(测试上传excel文件)
		第一次用jmeter这个工具测试上传接口,以前没做过这一块,导致走了很多弯路.特地把经验谢谢,怕自己以后忘记... 一,jmeter如何上传文件 jmeter 的 http requests post ... 
- SpringBoot(十三)_springboot上传Excel并读取excel中的数据
		今天工作中,发现同事在整理数据,通过excel上传到数据库.所以现在写了篇利用springboot读取excel中的数据的demo.至于数据的进一步处理,大家肯定有不同的应用场景,自行修改 pom文件 ... 
- Salesforce LWC学习(三十二)实现上传 Excel解析其内容
		本篇参考:salesforce lightning零基础学习(十七) 实现上传 Excel解析其内容 上一篇我们写了aura方式上传excel解析其内容.lwc作为salesforce的新宠儿,逐渐的 ... 
- js上传Excel文件
		一.问题 需要在项目里添加一个上传excel文件的功能,因为其他同样的后台里面有上传文件的功能,第一反应就是想着直接用.了解了一下发现它是利用bootstrap的fileinput实现的,但是我怎么都 ... 
- Django中从本地上传excel文件并将数据存储到数据库
		Django中从本地上传excel文件并将数据存储到数据库 一.前端界面 <div class="page-container"> <form action=&q ... 
- asp.net上传Excel文件到服务端进行读取
		1.我们IIS是使用7.5,由于在网站中上传Excel文件到服务端进行数据读取时候出现读取失败情况.一开始以为是没有按照office软件问题,其实不然,因为server是64位操作系统,如果我们要使用 ... 
- salesforce lightning零基础学习(十七) 实现上传 Excel解析其内容
		本篇参考: https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader https://github.com/SheetJS/sheetjs ... 
随机推荐
- Assignment写作需要掌握的两种表达方式
			在正式开始写Assignment之前都会进行文献检索和整理,选择适合Assignment选题的文献资料进行阅读和引用.对于文献中与自己的观点高度相关的参考资料要如何具体引用,而不造成抄袭或者增加文章的 ... 
- 给指定的div增加滚动条
			这次的需求是给一个指定的div(里面有个table表格)增加上下.左右的滚动条 通过查找资料后找到了一个可用的方法,代码如下: <!--div比table大小要小才会显示--> <d ... 
- CPU的成本构成
			1)设计成本: 工程师的工资,EDA等开发工具的费用.设备费用.场地费用等等. 2)硬件成本: 硬件成本=(晶片成本+掩膜成本+封装.测试成本)/成品率 1.晶片成本 一片硅晶圆 晶片成本=晶圆成本/ ... 
- 使用Docker构建基于centos7镜像的python环境
			Dcokerfile配置信息 ############################################## # 基于centos7构建python3运行环境 # 构建命令: 在Dock ... 
- c++ 字母排序
			char a[123] = {'Z', 's', 'p', 'l', 'j', 'r', 'q', 'v', 'n', 'm', 'C', 'F', 'D', 'B', 'A', '2', '0', ... 
- pytorch安装及基本用法
			20180425更新 安装pytorch0.4.0: conda uninstall pytorch # 如果是CUDA版本的话 conda uninstall cuda80 cuda90 # 如果 ... 
- h5-web字体和字体图标
			想要使用可以在: https://www.iconfont.cn/webfont?spm=a313x.7781069.1998910419.d81ec59f2#!/webfont/index :是we ... 
- js 关联数组
			踩得坑: JS ,通过 new Array()创建了一个数组: var param = new Array();param["key1"] = value1;param[&quo ... 
- ssh到ubuntu没颜色
			ssh远程到ubuntu系统, 没有颜色. 原因是 .bashrc 配置没生效. $ echo '. $HOME/.bashrc' > ~/.profile 
- UML-活动图及其建模
			1.目标:UML活动图标示法. 2.定义:一个UML活动图标示一个过程中的多个顺序活动和并行活动.这些活动有助于对业务过程.工作流.数据流和复杂算法进行建模. 3.作用:既能表示控制流又能标示数据流. ... 
