java怎么将excel中string类型在导入到数据库时转换成表中对应的id

在将excel导入过程中,要导入的数据库中的表的字段是与其他表相关联的id,excel中是文字形式,到导入时将文字与那张关联的表相对应并取出id放入要导入的表中,请问怎么实现
最新回答
意志以颓废

2024-09-18 04:06:59

首先你得解析excle,再封装实体,赋值对应的字段,存入数据库,类似下面的这个:

public static void readExcel(String filePath){
Products products = new Products();
SqlSession sqlSession = MybatisSqlSessionFactory.getSession();
    ProductsMapper productsMapper =  sqlSession.getMapper(ProductsMapper.class);
Map<Integer, String> map1 = FileUtil.readfile(filePath, null);
    for(int i=0 ; i < map1.size(); i++) {
    //获取工作表
    Workbook workbook = ExcelUtil.reWorkbook(map1.get(i));
    //获取sheet个数
    int shNum = ExcelUtil.reExcelSheet(workbook);
    for (int num = 0; num < shNum; num++) {
    //获取行数
    int rowNum = ExcelUtil.reExcelSheetRowNum(workbook, num);
    if(rowNum != 0)
    {
    for (int rnum = 0; rnum <= rowNum; rnum++) {
    //获取列数
    int cellNum = ExcelUtil.reExcelSheetCellNum(workbook, num, rnum);
    if(cellNum != 0)
    {
    String value = ExcelUtil.reExcelValue(workbook, num, rnum, 0, false);
    products.setProductcode(value);
    products.setActivestatus("1");
    int code = productsMapper.updateByProductCode(products);
    sqlSession.commit();
    if(code != 0)
    {
    logger.info("读取Excel的行数为{},更新数据条数为{}",rnum,code);
    }
    }
    }
    }
    }
    logger.info("读取Excel完成");
    }
}
长发及腰已是过去

2024-09-18 17:27:30

问题描述的有点不清楚。你EXCEL中是什么样的数据?表的ID,那么直接读取就好了啊,跟关联表有什么关系。
追问
就是大表中比如说有个部门这个字段,而各个部门存在部门这个表中,大表添加时取的是部门表的id来显示名称,而excel表中也有部门这个字段,但是是文字,需要与部门表的部门对应并取出id,在导入时存入大表中
追答
简单啊。你把部门表的数据取出来,循环一下,存放到一个Map中去,文字(也就是部门名称)作为一个key,然后部门id作为value。
然后再读取EXCEL的时候,把读取到的部门名称,在Map中取一下不就行了。前提肯定是EXCEL中的名称跟数据库中的名字完全一致。
追问
能不能大概写一下代码,不是很会
追答

额,这个不太好写啊。我写个大概吧。

// 导入数据
public void  importExcel(){
  // 获取部门(假如你的部门类叫Dept)
  List<Dept> deptList = ......;
  Map<String,String> deptMap = new HashMap<String,String>();
  for(Dept d : deptList){
    deptMap.put(d.getDeptName,d.getDeptId());
  }
  
  // 读取EXCEL。。。略
  // 读取部门cell....
  String deptNameCell = 。。。。;
  String deptId = deptMap.get(deptNameCell); 
  
}

就这样吧,我写的越多,你会的就越少。