用SQL实现Excel文件的CRUD操作

1. 简介

在 Java 中操作 Excel 文件是常见的需求,无论是读取测试数据、生成报表,还是处理业务数据,都需要与 Excel(.xls 或 .xlsx)进行交互。Java 生态提供了多种库来实现这一功能,从轻量级到企业级工具各有特点。以下是 Java 中操作 Excel 的主流库及其核心特点概述:

  • Apache POI:功能全面,支持新旧版 Excel 格式及复杂操作(如公式、图表),但大文件处理时内存消耗高,易内存溢出。
  • EasyExcel:基于 POI 优化,采用 SAX 模式逐行读取,适合大数据量操作,内存占用低,API 简洁易用。
  • JExcelAPI:轻量级,仅支持旧版 .xls 格式,API 简单,但功能有限,已逐渐被淘汰。

若需兼顾易用性与查询灵活性,Fillo 是一个独特选择。它通过 类 SQL 语法 简化操作,隐藏底层复杂度,尤其适合测试数据管理、快速报表生成等场景,且对小文件性能友善。

什么是Fillo?

Fillo 是 Java 的 Excel API,可以查询 xls 和 xlsx 文件。目前,它支持带或不带 WHERE 子句的 SELECT、UPDATE 和 INSERT 查询。与 JXL API 和 Apache POI 等传统库相比,Fillo 的接口设计显著简化了操作流程。传统库需要开发者手动编写大量代码来遍历行列、提取单元格值,并处理不同数据类型的转换;而 Fillo 在内部自动完成了这些底层逻辑,开发者无需关注行/列索引或单元格格式等细节。更关键的是,Fillo 支持通过 标准 SQL 语句 直接实现数据的增删改查(CRUD),例如用 SELECT * FROM Sheet1 WHERE Age > 25 即可筛选数据,而 Apache POI 实现同等功能需数十行 Java 代码,极大降低了开发复杂度。

2.实战案例

2.1 准备环境

第一,引入依赖

<dependency>
  <groupId>com.codoid.products</groupId>
  <artifactId>fillo</artifactId>
  <version>1.23</version>
</dependency>

最后,准备Excel文件

用SQL实现Excel文件的CRUD操作

2.2 Select查询操作

static String file = "C:UsersMSI-NBDesktopuser.xlsx";
public static void select() throws Exception {
  Fillo fillo = new Fillo() ;
  Connection conn = fillo.getConnection(file);
  String strQuery = "Select * from baseInfo where name='陈浩然'";
  Recordset rs = conn.executeQuery(strQuery);
  while (rs.next()) {
    System.err.printf("%s	%s	%s	%s	%s	%n", 
        rs.getField("id"), rs.getField("name"), 
        rs.getField("age"), rs.getField("email"), 
        rs.getField("idNo")) ;
  }
  // 多个Where条件
  rs = conn.executeQuery(
      "Select * from baseInfo where name='杨晨曦' and age='52'");
  while (rs.next()) {
    System.out.printf("%s	%s	%s	%s	%s	%n", 
        rs.getField("id"), rs.getField("name"), 
        rs.getField("age"), rs.getField("email"), 
        rs.getField("idNo")) ;
  }
  // 通过方法构建where条件
  rs = conn.executeQuery("Select * from baseInfo").where("name='黄俊杰'")
      .where("idNo='420105200101011000'");
  while (rs.next()) {
    System.err.printf("%s	%s	%s	%s	%s	%n", 
        rs.getField("id"), rs.getField("name"), 
        rs.getField("age"), rs.getField("email"), 
        rs.getField("idNo")) ;
  }
  rs.close();
  conn.close();
}

输出结果

用SQL实现Excel文件的CRUD操作

2.3 Insert插入操作

static String file = "C:UsersMSI-NBDesktopuser.xlsx";


public static void insert() throws Exception {
  Fillo fillo = new Fillo();
  Connection conn = fillo.getConnection(file);
  String strQuery = "INSERT INTO baseInfo (id, name, age, email, idNo) VALUES (9, 'Pack张三', 33, 'pack@qq.com', '5555533336666')";
  conn.executeUpdate(strQuery);
  conn.close();
}

执行结果

用SQL实现Excel文件的CRUD操作

控制台输出

5 columns(s) affected

2.4 Update更新操作

static String file = "C:UsersMSI-NBDesktopuser.xlsx";


public static void update() throws Exception {
  // ...
  String sql = "Update baseInfo Set name='Spring Boot3实战案例200讲' where id=9";
  conn.executeUpdate(sql) ;
  // ...
}

执行结果

用SQL实现Excel文件的CRUD操作

2.5 Delete删除操作

static String file = "C:UsersMSI-NBDesktopuser.xlsx";


public static void delete() throws Exception {
  // ...
  String strQuery = "DELETE FROM baseInfo where id=9";
  conn.executeUpdate(strQuery);
  // ...
}

执行结果

用SQL实现Excel文件的CRUD操作

控制台输出

1 row(s) affected

2.6 Like模糊查询

static String file = "C:UsersMSI-NBDesktopuser.xlsx";


public static void likeQuery() throws Exception {
  // ...
  String strQuery = "Select * from baseInfo where name like '%陈%'";
  Recordset rs = conn.executeQuery(strQuery);
  // ...
}

输出结果

用SQL实现Excel文件的CRUD操作

2.7 Distinct去重操作

public static void distinctOperator() throws Exception {
  // ...
  String strQuery = "Select DISTINCT name from baseInfo";
  Recordset rs = conn.executeQuery(strQuery);
  while (rs.next()) {
    System.err.printf("%s%n", rs.getField("name"));
  }
  // ...
}

准备数据

用SQL实现Excel文件的CRUD操作

执行结果

用SQL实现Excel文件的CRUD操作

去除重复的姓名。

2.8 设置起始行&列

public static void setRowAndColumn() throws Exception {
  // Table start row
  System.setProperty("ROW", "1");
  // Table start column
  System.setProperty("COLUMN", "1");


  Fillo fillo = new Fillo();
  Connection conn = fillo.getConnection(file);
  String strQuery = "Select * from baseInfo";
  Recordset rs = conn.executeQuery(strQuery);
  // ...
}

输出结果

用SQL实现Excel文件的CRUD操作

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 共1条

请登录后发表评论

    暂无评论内容