news 2026/6/15 18:50:23

Excel文件解析与数据库存储方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Excel文件解析与数据库存储方案

1.系统现有的文件上传和下载是没有问题的,目前的需求就是将上传的文件进行解析并存入数据库中;

2.上传的文件类型目前都是XLSX类型,需要书写文件解析工具类,用来获取数据;

2.相关的数据库表字段并没有创建,根据上传文件不同创建不同数据库表进行存储文件数据;

3.不同类型的文件Service层需要根据业务需求进行控制,再调用SqlSession来操作数据库(写入数据)也就是增加/修改,删除操作已经存在需要测试是否有效;

文件解析与存储方案设计

文件解析工具类实现XLSX文件解析可使用Apache POI库,创建通用解析工具类处理不同文件类型的数据提取。示例工具类框架如下:

public class ExcelParserUtil { public static List<Map<String, Object>> parseXLSX(MultipartFile file) throws IOException { List<Map<String, Object>> dataList = new ArrayList<>(); try (XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream())) { XSSFSheet sheet = workbook.getSheetAt(0); // 读取表头作为字段名 XSSFRow headerRow = sheet.getRow(0); // 遍历数据行 for (int i = 1; i <= sheet.getLastRowNum(); i++) { Map<String, Object> rowData = new HashMap<>(); XSSFRow row = sheet.getRow(i); // 单元格数据处理逻辑 for (int j = 0; j < headerRow.getLastCellNum(); j++) { String fieldName = headerRow.getCell(j).getStringCellValue(); rowData.put(fieldName, row.getCell(j)); } dataList.add(rowData); } } return dataList; } }

动态表结构管理

表结构自动生成策略根据XLSX文件表头动态创建表结构,建议采用以下方式:

public void createTableFromExcel(String tableName, List<String> columnHeaders) { StringBuilder sql = new StringBuilder("CREATE TABLE IF NOT EXISTS ") .append(tableName).append(" (id INT AUTO_INCREMENT PRIMARY KEY, "); for (String header : columnHeaders) { sql.append(header.replaceAll("\\s+", "_")).append(" VARCHAR(255), "); } sql.deleteCharAt(sql.length()-2).append(")"); sqlSession.update("DynamicTableMapper.createTable", sql.toString()); }

业务层处理逻辑

多文件类型路由控制Service层通过文件特征(如文件名前缀)进行业务路由:

@Service public class FileProcessingService { @Autowired private SqlSession sqlSession; public void processFile(MultipartFile file) { String fileName = file.getOriginalFilename(); if (fileName.startsWith("ORDER_")) { processOrderFile(file); } else if (fileName.startsWith("INVENTORY_")) { processInventoryFile(file); } } private void processOrderFile(MultipartFile file) { // 订单业务特殊处理逻辑 List<Map<String, Object>> data = ExcelParserUtil.parseXLSX(file); sqlSession.insert("OrderMapper.batchInsert", data); } }

数据库操作验证

现有删除功能测试方案编写单元测试验证删除操作:

@Test public void testDeleteOperation() { Map<String, Object> params = new HashMap<>(); params.put("tableName", "test_table"); params.put("id", 1); int affectedRows = sqlSession.delete("CommonMapper.deleteById", params); assertEquals(1, affectedRows); }

类型安全处理建议

数据转换最佳实践在解析工具类中增加类型转换处理:

private Object convertCellValue(Cell cell) { switch (cell.getCellType()) { case NUMERIC: return cell.getNumericCellValue(); case STRING: return cell.getStringCellValue(); case BOOLEAN: return cell.getBooleanCellValue(); default: return null; } }

事务管理配置

批量操作事务控制在Service方法添加事务注解保证数据一致性:

@Transactional public void batchInsertData(String tableName, List<Map<String, Object>> data) { for (Map<String, Object> record : data) { record.put("tableName", tableName); sqlSession.insert("DynamicTableMapper.insert", record); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 11:40:45

SpringBoot 集成 XXL-JOB

这篇文章面向后端工程师和运维同学&#xff0c;手把手教你把 XXL-JOB 无缝集成到 Spring Boot 项目中&#xff1b;包含完整源码示例、配置项说明、常见问题与排查、最佳实践与运维建议&#xff0c;复制即可发布到技术博客。目录 背景与适用场景准备工作&#xff08;XXL-JOB 管理…

作者头像 李华
网站建设 2026/6/15 9:33:39

SpringBoot+Vue3+MySQL集群 开发健康体检双系统

随着全民健康意识的提升&#xff0c;健康体检系统正面临着前所未有的流量洪峰。从每年的“体检季”预约高峰&#xff0c;到企业团检的集中涌入&#xff0c;瞬时的高并发访问足以让传统的单体应用架构瞬间崩溃。如何构建一个既能承载海量用户、又能保证数据安全与业务连续性的高…

作者头像 李华
网站建设 2026/6/15 16:30:25

AutoDock-Vina分子对接终极教程:Windows环境高效配置与实战解析

AutoDock-Vina分子对接终极教程&#xff1a;Windows环境高效配置与实战解析 【免费下载链接】AutoDock-Vina AutoDock Vina 项目地址: https://gitcode.com/gh_mirrors/au/AutoDock-Vina 还在为分子对接实验的复杂配置而苦恼吗&#xff1f;AutoDock-Vina作为药物研发领域…

作者头像 李华
网站建设 2026/6/15 12:49:38

找出字符串中第一个匹配项的下标

直观的解法的是&#xff1a;枚举原串 ss 中的每个字符作为「发起点」&#xff0c;每次从原串的「发起点」和匹配串的「首位」开始尝试匹配&#xff1a;匹配成功&#xff1a;返回本次匹配的原串「发起点」。 匹配失败&#xff1a;枚举原串的下一个「发起点」&#xff0c;重新尝试…

作者头像 李华
网站建设 2026/6/15 18:45:33

在计算机学术界如何区分Vision和Perception这两个单词

在学术界&#xff08;特别是计算机科学、机器人学和认知科学领域&#xff09;&#xff0c;Vision&#xff08;视觉&#xff09; 和 Perception&#xff08;感知&#xff09; 虽然经常混用&#xff0c;但在严格定义下有明显的层级和范围区别。 简而言之&#xff1a;Vision 是手段…

作者头像 李华
网站建设 2026/6/15 14:58:26

30亿参数重塑企业AI格局:ERNIE 4.5如何用效率革命应对落地挑战

导语 【免费下载链接】ERNIE-4.5-300B-A47B-Base-PT 项目地址: https://ai.gitcode.com/hf_mirrors/baidu/ERNIE-4.5-300B-A47B-Base-PT 百度ERNIE 4.5系列大模型以异构混合专家&#xff08;MoE&#xff09;架构实现“210亿总参数仅激活30亿”的突破性设计&#xff0c;…

作者头像 李华