理之当然网

通过数据库表的配置信息,匹配一个excel表格,并将excel内容上传到数据库

通过数据库表的配置信息,匹配一个excel表格,并将excel内容上传到数据库

需求:

  1. 数据库中有四张表,通过四张表的数据上传配置信息加上postMan的请求参数会对应某个数据库的信息表,可以将指定的库表excel表格通过excel上传到数据库中
  2. 表的配置截图如
    cell表上传的是一维单元格/二维excel表 指定列开始 指定行开始 数据来源 来源的数据类型(date/string/number)指定的数据格式在这里插入图是片描ce述del表判断删除或更新
    指向表
    在这里插入图片描述
    导入信息表
    在这里插入图片描述

问题及解决方法

1.字符格式转换异常

excel定义的是字符串(2020年1月1日),但是配到数用户输入了数据后设置成了excel的日期类型,此时读入数据库后会被poi识别成一个numeric类型,置信并会将如上数据插入为49885
解决方法
在checkStr中新增识别excel格式为numeric后转成string类型的息匹代码

在这里插入图片描述在这里插入图片描述
思路
识别为numeric后,获取数据库中的格并时间格式,若无就设置成固定的将e据库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含义是使用$或#进行了颠倒,否则报错,怀疑是上一个人定义错了
在这里插入图片描述
在这里插入图片描述

未经允许不得转载:理之当然网 » 通过数据库表的配置信息,匹配一个excel表格,并将excel内容上传到数据库