news 2026/2/24 6:52:40

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/2/23 21:10:21

Morisawa BIZ UDGothic 字体使用指南:让文字表达更专业优雅

Morisawa BIZ UDGothic 字体使用指南&#xff1a;让文字表达更专业优雅 【免费下载链接】morisawa-biz-ud-gothic 项目地址: https://gitcode.com/gh_mirrors/mo/morisawa-biz-ud-gothic Morisawa BIZ UDGothic 是一款由日本著名字体公司 Morisawa 开发的通用设计字体&…

作者头像 李华
网站建设 2026/2/22 2:40:01

量子化学:材料的电子态密度

在现代材料科学、纳米技术、半导体器件设计、催化以及智能传感领域&#xff0c;材料的电子结构决定了它的性能。电子的分布方式不仅影响导电性、磁性、光学行为&#xff0c;还决定了化学反应活性和界面特性。电子态密度&#xff08;Density of States, DOS&#xff09;是分析电…

作者头像 李华
网站建设 2026/2/23 10:43:48

零基础也能做!用Qoder快速开发“技能五子棋”蹭热点项目

大家好&#xff0c;我是来自阿里云设计部的一名设计师。坦白说&#xff0c;我是个纯开发小白&#xff0c;但今天我想和大家分享一个让我自己都感到惊喜的经历&#xff1a;如何仅凭自然语言&#xff0c;借助AI工具Qoder&#xff0c;从零做出一款技能五子棋游戏。一、设计阶段&am…

作者头像 李华
网站建设 2026/2/23 9:47:47

GitHub加速终极方案:告别龟速访问,体验丝滑编程

GitHub加速终极方案&#xff1a;告别龟速访问&#xff0c;体验丝滑编程 【免费下载链接】github-hosts &#x1f525;&#x1f525;&#x1f525; 本项目定时更新GitHub最新hosts&#xff0c;解决GitHub图片无法显示&#xff0c;加速GitHub网页浏览。 项目地址: https://gitc…

作者头像 李华
网站建设 2026/2/23 9:37:34

【总结】【计组】【OS】页号、页框号、虚拟地址、物理地址、地址

目录 页号和页框号对比 页表项、页表、页号、页框号关系 页表项详细结构 页表的组织方式与特点 操作系统与硬件的协同管理 地址字段划分计算 页表大小计算 整体过程分析&#xff08;地址转换、通过物理地址访问数据&#xff09; 地址转换与访问流程 操作系统核心职责…

作者头像 李华
网站建设 2026/2/23 12:42:48

超细整理,性能测试如何做?怎么做?性能压力负载(汇总三)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 做性能测试的时候…

作者头像 李华