ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

poi处理Excel数据

2021-10-12 19:34:29  阅读:198  来源: 互联网

标签:唯一性 BigDecimal 处理 double Excel cell poi 数据 id


最近做项目,有一个上传excel文件,将文件中的数据存储到数据库中,遇到几个问题。

1.批量插入数据报错

如果列表为空,MYSQL执行批量插入时会报错,在进行批量插入之前,需要进行判断,如果需要保存的数据列表为空或者是list.size()=0,则不要进行插入操作

2.批量插入数据,对于重复数据,如果不想重复保存的情况(唯一性约束)

唯一性约束:如果不是主键的话,可以选择唯一性约束,可以选择一个护着多个变量来确定数据的唯一性

<!--唯一性约束-->
alter table 表名 add CONSTRAINT billId UNIQUE(bill_id);

alter table 表名 add CONSTRAINT uniqueKey UNIQUE(user_id,bill_id);

insert into 表名 
  (col1,col2...) 
values
  (val1,val2...)
on DUPLICATE key UPDATE user_id,bill_id

3.Excel单元格日期格式的判断

CellType cellType = cell.getCellTypeEnum();
if (cellType == CellType.NUMERIC){
	//条件为真,是日期格式数据
    if (DateUtil.isCellDateFormatted(cell)){
    	//返回数据是java.util.Date类型
        return cell.getDateCellValue();
    }
    //返回数据是double类型
    return cell.getNumericCellValue();
}

4.BigDecimal与double的坑

直接拿double类型数据来初始化BigDecimal类型的变量,会导致精度问题

double num = 3.3;
BigDecimal bigDecimal = new BigDecimal(num);
//输出结果是
//3.2999999999999.。。。。。。

从网上找了一通,算是找到一个方案吧
将double类型转换为字符串,用它来初始化BigDecimal类型的变量,不会出现精度问题

BigDecimal bigDecimal = new BigDecimal(Double.toString(num));
//输出结果
//3.3

5.时间格式化

在格式化时间时,把模板yyyy-MM-dd HH:mm:ss写成了yyyy-MM-dd hh:mm:ss,导致输出一直12小时制,这个需要注意,HH是24小时制,hh是12小时制时间

标签:唯一性,BigDecimal,处理,double,Excel,cell,poi,数据,id
来源: https://blog.csdn.net/qq_32848433/article/details/120729878

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有