poi处理Excel数据

最近做项目,有一个上传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小时制时间

上一篇:new BigDecimal(“0.00“)与new BigDecimal(0.00)的区别


下一篇:java 除法向上,向下取整