news 2026/1/11 7:25:25

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进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/24 6:59:19

【开题答辩全过程】以 个性化新闻推荐系统为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

作者头像 李华
网站建设 2026/1/9 23:08:13

爱尔兰耕地与农业发展解析

爱尔兰以草地畜牧业为核心&#xff0c;农业用地约450万公顷&#xff08;占国土65%&#xff09;&#xff0c;其中80%为牧场&#xff0c;形成“草-畜-出口”的高效体系&#xff0c;是欧盟重要的牛肉与乳制品供应国&#xff0c;农业GDP占比约4.3%&#xff0c;食品出口约占商品出口…

作者头像 李华
网站建设 2026/1/3 2:01:48

如何高效抓取淘宝直播弹幕数据:完整实战指南

如何高效抓取淘宝直播弹幕数据&#xff1a;完整实战指南 【免费下载链接】taobao-live-crawler A crawler on taobao live barrages. 项目地址: https://gitcode.com/gh_mirrors/ta/taobao-live-crawler 想要了解淘宝直播间里观众的真实想法吗&#xff1f;想通过弹幕数据…

作者头像 李华
网站建设 2025/12/23 17:15:56

Python测试终极指南:为什么pytest成为开发者的首选工具

Python测试终极指南&#xff1a;为什么pytest成为开发者的首选工具 【免费下载链接】pytest The pytest framework makes it easy to write small tests, yet scales to support complex functional testing 项目地址: https://gitcode.com/gh_mirrors/py/pytest 在Pyth…

作者头像 李华
网站建设 2025/12/23 14:04:55

【总结】【OS】由操作系统完成的

场景/操作由操作系统完成&#xff08;OS的责任&#xff09;不由操作系统完成&#xff08;易混淆点&#xff09;备注/易混淆点说明中断相关操作1. 中断响应后的现场保护&#xff08;将PSW、PC等压入系统栈&#xff09;。2. 分析中断原因&#xff0c;并转入相应的中断处理程序。3…

作者头像 李华
网站建设 2026/1/1 5:53:55

3分钟快速上手:用Scratch玩转浏览器AI机器学习

想要零基础体验机器学习的神奇魅力吗&#xff1f;ML2Scratch让这一切变得触手可及&#xff01;这个基于TensorFlow.js的开源项目&#xff0c;让您直接在浏览器中就能完成Scratch机器学习训练和可视化AI编程&#xff0c;无需复杂的代码编写&#xff0c;打开浏览器就能开始您的AI…

作者头像 李华