Java 导入文件-数据以树形的格式保存到数据库

给你以下 excel 文件,数据格式以市-区-街道的关系保存到数据库中,数据库表大致字段为 id、pid、name、code

 代码如下:

    public boolean importData(MultipartFile file) {
        Workbook workbook = null;
        try {
            workbook = WorkbookFactory.create(file.getInputStream());
            // 获取第一个工作表
            Sheet sheet = workbook.getSheetAt(0);
            // 创建区和街道的关系映射
            Map<String, String> relationshipMap = new HashMap<>();
            // 创建市和区的关系映射
            Map<String, String> cityRelationshipMap = new HashMap<>();
            String currentCity = null;
            String currentDistrict = null;

            // 遍历每一行
            for (int rowIndex = 1; rowIndex < sheet.getLastRowNum() + 1; rowIndex++) {
                Row row = sheet.getRow(rowIndex);

                // 获取市列、区列和街道列的值
                Cell cityCell = row.getCell(0);
                Cell districtCell = row.getCell(1);
                Cell streetCell = row.getCell(2);
                Cell codeCell = row.getCell(3);

                // 获取市、区和街道的值
                String city = cityCell.getStringCellValue();
                String district = districtCell.getStringCellValue();
                String street = streetCell.getStringCellValue();
                if (currentCity == null) {
                    currentCity = city;
                }

                if (currentDistrict == null) {
                    currentDistrict = district;
                }

                if (StringUtils.isNotBlank(city)) {
                    // 将市和区添加到关系映射中
                    currentCity = city;
                    cityRelationshipMap.put(currentCity, district);
                } else if (StringUtils.isNotBlank(district)) {
                    // 将市和区添加到关系映射中
                    String previousDistrict = cityRelationshipMap.get(currentCity);
                    cityRelationshipMap.put(currentCity, previousDistrict + "," + district);
                }

                if (StringUtils.isNotBlank(district)) {
                    // 将区和街道添加到关系映射中
                    currentDistrict = district;
                    relationshipMap.put(currentDistrict, street + " " + codeCell.getStringCellValue());
                } else if (StringUtils.isBlank(district) && StringUtils.isNotBlank(street)){
                    // 将街道追加到关系映射中
                    String previousStreet = relationshipMap.get(currentDistrict);
                    relationshipMap.put(currentDistrict, previousStreet + "," + street + " " + codeCell.getStringCellValue());
                }
            }
            for (Map.Entry<String, String> entry : cityRelationshipMap.entrySet()) {
                System.out.println(entry.getKey() + ":" + entry.getValue());
                Region region = new Region();
                String[] parts = spiltRegion(entry.getKey());
                region .setRegionName(parts[0]);
                region .setRegionCode(parts[1]);
                this.save(region);
                
                List<Region> districtList = new ArrayList<>();
                String[] districts = entry.getValue().split(",");
                for(String district : districts) {
                    String[] part = spiltRegion(district);
                    Region region1 = new Region();
                    region1.setRegionName(part[0]);
                    region1.setRegionCode(part[1]);
                    region.setParentId(region.getRegionId());
                    districtList.add(region1);
                }
                this.saveBatch(districtList);
                for (Region region : districtList) {
                    ArrayList<Region> streetList = new ArrayList<>();
                    String key = region.getRegionName() + " " + region.getRegionCode();
                    String streets = relationshipMap.get(key);
                    String[] split = streets.split(",");
                    for (String s : split) {
                        String[] part = spiltRegion(s);
                        log.debug(s);
                        Region street = new Region();
                        street.setRegionName(part[0]);
                        street.setRegionCode(part[1]);
                        street.setParentId(region.getRegionId());
                        streetList.add(street);
                    }
                    this.saveBatch(streetList);
                }
            }
            return true;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }

    public String[] spiltRegion(String input) {
        Pattern pattern = Pattern.compile("^(.*?)\\n(\\d+)");
        Matcher matcher = pattern.matcher(input);
        String[] result = new String[2];
        if (matcher.matches()) {
            result[0] = matcher.group(1);
            result[1] = matcher.group(2);
        }
        return result;
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以使用Java的接口和文件流来导入Excel数据数据库。下面是一个简单的示例代码: ```java import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.Iterator; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ExcelImporter { public void importDataFromExcel(File file) { try { FileInputStream fis = new FileInputStream(file); // 创建工作簿对象 Workbook workbook = new XSSFWorkbook(fis); // 获取第一个工作表 Sheet sheet = workbook.getSheetAt(0); // 迭代行 Iterator<Row> rowIterator = sheet.iterator(); while (rowIterator.hasNext()) { Row row = rowIterator.next(); // 迭代单元格 Iterator<Cell> cellIterator = row.cellIterator(); while (cellIterator.hasNext()) { Cell cell = cellIterator.next(); // 处理单元格数据,例如将数据插入数据库 String cellValue = cell.getStringCellValue(); // TODO: 将cellValue插入数据库 } } // 关闭文件流和工作簿 workbook.close(); fis.close(); System.out.println("数据导入成功!"); } catch (IOException e) { e.printStackTrace(); } } } ``` 这个示例使用了Apache POI库来处理Excel文件。你需要先导入Apache POI库,然后创建一个ExcelImporter类,其中的importDataFromExcel方法接受一个File对象作为参数,表示要导入Excel文件。在方法中,我们首先创建一个文件输入流来读取Excel文件,然后使用XSSFWorkbook类创建工作簿对象。接下来,我们可以使用工作簿对象获取工作表,并迭代行和单元格来处理数据。你可以在循环中根据需要将单元格数据插入数据库。最后,记得关闭文件流和工作簿。 你可以根据自己的数据库类型和需求来修改代码,例如使用JDBC来连接数据库并插入数据。希望对你有所帮助!如有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值