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