需求:
- 数据库中有四张表,四张表的配置信息加上postMan的请求参数会对应某个数据库的信息表,可以将指定的excel表格通过excel上传到数据库中
- 表的配置截图如
cell表上传的是一维单元格/二维excel表 指定列开始 指定行开始 数据来源 来源的数据类型(date/string/number)指定的数据格式del表判断删除或更新
指向表
导入信息表
问题及解决方法
1.字符格式转换异常
excel定义的是字符串(2020年1月1日),但是用户输入了数据后设置成了excel的日期类型,此时读入数据库后会被poi识别成一个numeric类型,并会将如上数据插入为49885
解决方法
在checkStr中新增识别excel格式为numeric后转成string类型的代码
思路
识别为numeric后,获取数据库中的时间格式,若无就设置成固定的yyyy-MM-dd的格式,新建DateFormat,传入上述格式,并将excel的numeric格式进行格式化为字符串格式,实现思路较简单,代码简单
2.该上传工程在之前没有考虑上传date类型,到时会报ORA-*的错误此处要对date类型进行处理 处理方式为通过四张表的配置 将excle的date类型转成oracle的date/varchar类型 或 将excel的date类型转成sqlSercer的date类型
1. 解决思路 : 首先要获得我要上传的是那个数据库,判断后进行时间类型转换,开始以为要新建四种方法
2. 解决方法 : 在配置表新建一个list集合,通过循环插入配置信息,debug发现list的0号位代表数据库类型,将这个list传入参数判断的方法中,通过get(0).getString()的方式获取数据库是oracle还是sqlServer,并通过与定义的常量值对比,来进行4中date类型转换的方法添加
3. 后续异常:工程有两套动态遍历插入数据库sql,分别对应两个数据库,在数据库通过sql进行java的date转数据库date即可,再在方法内将excel的data转成java的date即可,推翻当前思路,比较麻烦
1.解决思路 : 分两步进行,识别到excel是date后,进行java类型转换,在sql处进行java的date转成数据库的data
2.遇到问题及解决方法 :
- 日期类型转换,不断尝试后使用poi不会报错
- 常量类的新增 识别为date类型
- 新建的方法是参照其他方法书写,转换完后格式为string,尝试将返回值的类型变成date,那么需要在返回值的类中新增构造器及属性
- 新建构造后发现date类型赋值不正确,解决方法:在构造器之前新建一个dateformat,对构造器内的参数进行转换,并添加后缀“00:00:00”
- 动态sql中插入数据是遍历插入,但在给数据设置值使用的Map,所以数据混乱,遍历时格式不固定,尝试使用LinkedHashMap解决,但是改动太多,后根据配置中字段属性,获取当前字段的数据格式,封装成一个list,并将该list放入传给数据库参数的jsonObject中,方便后续判断该字段是date类型或普通类型
- sql的date转换语法错误:oracle为 TO_DATE(#{value},‘YYYY-MM-DD HH24:MI:SS’) sqlServer为:COINVER(nvarchar(100),#{value},102), 具体可以百度获取
- 在上述转换后发现字段中有sysdate类型为本地时间,所以要先遍历传参的value是否是sysdate
3.具体代码如下
新增构造器,并直接对构造器内格式进行转换
新增检查失败或通过的方法
将导入配置的list赋值后直接传给对象构造属性,方便后续获取配置信息
校验数据时新增checkDate方法
新增将format(入参的数据格式传入dao层的json中)
新增sql 还没有完善 : 这里将paramType含义是使用$或#进行了颠倒,否则报错,怀疑是上一个人定义错了