Spring Boot 实现自定义 JDBC 通过 SQL 语句来查询 Excel

Spring Boot 实现自定义 JDBC 通过 SQL 语句来查询 Excel

Boot 结合自定义 JDBC 的方式sql xml path,实现通过 SQL 语句来查询 Excel 文件中的数据,这本质上是把 Excel 当作一个数据库来操作。

实现思路

要实现这个需求Spring Boot 实现自定义 JDBC 通过 SQL 语句来查询 Excel,核心是使用能识别 Excel 的 JDBC 驱动(如 结合 ,或更直接的 / 驱动)Spring Boot 实现自定义 JDBC 通过 SQL 语句来查询 Excel,通过自定义 JDBC 配置建立与 Excel 的连接,然后用标准 SQL 执行查询。以下是完整的可运行实现方案:

1. 引入核心依赖

首先在 pom.xml 中添加所需依赖( Boot 2.x/3.x 通用):



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.7.15 
        
    
    com.example
    excel-jdbc-demo
    1.0.0
    
        
        
            org.springframework.boot
            spring-boot-starter-jdbc
        
        
        
            net.sf.supercsv
            super-csv
            2.4.0
        
        
            org.apache.poi
            poi
            4.1.2
        
        
            org.apache.poi
            poi-ooxml
            4.1.2
        
        
        
            com.alibaba
            easyexcel
            3.3.2
        
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

26ac7a2e44b55692583120886942f115

2. 自定义 Excel JDBC 配置

创建配置类,手动配置数据源和 ,核心是指定 Excel 的 JDBC 连接 URL:

package com.example.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import javax.sql.DataSource;
@Configuration
public class ExcelJdbcConfig {
    /**
     * 配置Excel数据源(核心:指定Excel文件路径和JDBC驱动)
     */
    @Bean(name = "excelDataSource")
    public DataSource excelDataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        
        // 1. 指定Excel JDBC驱动(这里使用POI适配的驱动,支持xls/xlsx)
        dataSource.setDriverClassName("org.apache.poi.poifs.filesystem.POIFSFileSystem");
        
        // 2. JDBC URL格式:jdbc:excel:file://[Excel文件绝对路径]
        // 注意:实际生产中建议通过配置文件读取路径,这里为演示写死
        String excelPath = "D:/test.xlsx"; // 替换为你的Excel文件路径
        dataSource.setUrl("jdbc:excel:file://" + excelPath);
        
        // Excel无需用户名密码,留空即可
        dataSource.setUsername("");
        dataSource.setPassword("");
        
        return dataSource;
    }
    /**
     * 自定义JdbcTemplate,关联Excel数据源
     */
    @Bean(name = "excelJdbcTemplate")
    public JdbcTemplate excelJdbcTemplate() {
        return new JdbcTemplate(excelDataSource());
    }
}

3. 核心查询工具类

封装 SQL 查询 Excel 的方法,处理 Excel 表名(默认以 sheet 名为表名):

package com.example.service;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
@Service
public class ExcelJdbcQueryService {
    private final JdbcTemplate excelJdbcTemplate;
    // 注入自定义的Excel JdbcTemplate
    public ExcelJdbcQueryService(@Qualifier("excelJdbcTemplate") JdbcTemplate excelJdbcTemplate) {
        this.excelJdbcTemplate = excelJdbcTemplate;
    }
    /**
     * 执行SQL查询Excel数据
     * @param sql SQL语句(表名=Excel的sheet名,字段名=Excel表头)
     * @return 查询结果(List,key=表头,value=单元格值)
     */
    public List<Map> queryExcelBySql(String sql) {
        try {
            // 核心:用JdbcTemplate执行SQL查询Excel
            return excelJdbcTemplate.queryForList(sql);
        } catch (Exception e) {
            System.err.println("查询Excel失败:" + e.getMessage());
            throw new RuntimeException("SQL查询Excel异常", e);
        }
    }
}

4. 测试验证

创建测试类sql xml path,验证 SQL 查询 Excel 的效果(假设你的 Excel 文件 test.xlsx 有一个 sheet 名为 user,表头为 id、name、age):

package com.example;
import com.example.service.ExcelJdbcQueryService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
import java.util.Map;
@SpringBootTest
public class ExcelJdbcQueryTest {
    @Autowired
    private ExcelJdbcQueryService excelJdbcQueryService;
    @Test
    public void testQueryExcel() {
        // 1. 编写SQL(表名=sheet名,字段名=Excel表头)
        String sql = "SELECT id, name, age FROM user WHERE age > 18";
        
        // 2. 执行查询
        List<Map> result = excelJdbcQueryService.queryExcelBySql(sql);
        
        // 3. 打印结果
        System.out.println("查询结果:");
        for (Map row : result) {
            System.out.println("id: " + row.get("id") + 
                               ", name: " + row.get("name") + 
                               ", age: " + row.get("age"));
        }
    }
}

关键补充说明Excel 格式要求:Excel 的 sheet 名 对应 SQL 中的 表名;Excel 的 第一行 必须是表头(对应 SQL 中的字段名);建议表头和字段名使用英文,避免中文乱码。驱动适配优化:若上述驱动不满足需求,可替换为更成熟的 Excel JDBC 驱动(如 com.hxtt.sql.excel.),需额外引入 hxtt-excel-jdbc 依赖;替换驱动后,只需修改 为 com.hxtt.sql.excel. 即可。生产环境注意事项:

Excel 文件路径建议通过 application.yml 配置,避免硬编码:
excel: path: D:/test.xlsx
增加文件存在性校验,避免空指针;
大文件查询建议分页,避免内存溢出。

总结核心是通过 Excel 专用 JDBC 驱动 建立 Boot 与 Excel 的连接,将 Excel 视为数据库;自定义 和 绑定 Excel 数据源,即可用标准 SQL 查询 Excel(表名 = sheet 名sql xml path,字段名 = 表头);实际使用时需注意 Excel 格式规范、文件路径配置和大文件性能优化。

公告:
1. 本站所有资源来源于用户上传和网络,如有侵权请联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长处理!
6. 本站不售卖代码,资源标价只是站长收集整理的辛苦费!如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
7. 站长QQ号码 2205675299

资源库 - 资源分享下载网 » Spring Boot 实现自定义 JDBC 通过 SQL 语句来查询 Excel

常见问题FAQ

关于资源售价和售后服务的说明?
本站所有资源的标价均为本站收集资源的辛苦费,不代表资源本身的价值。软件是高智慧高价值的商品,不可能是白菜价。本站资源标价只是赞助费用,收取的赞助费仅用来维持本站的日常运营!毕竟收集整理资料需要投入云计算资源和站长大量的精力。
代码有没有售后服务和技术支持?
由于代码的运行具有不可预见性,本站不保证代码完整可运行,不提供技术支持和售后服务。 本站原创代码都是站长自己开发的,可以有偿提供技术支持服务。 网站里标明【亲测】的代码都是站长亲测过的,其他的代码由于精力有限,没有一一测试,不能保证代码就一定能够使用,更没有技术支持服务,下载前请自行斟酌。
有没有搭建服务?
由于搭建服务比较费时费力,所以本站除了原创代码外均不提供搭建服务。本站分享代码纯属兴趣爱好,不以盈利为目的,请勿咨询有没有搭建服务,谢谢理解。
链接地址失效了怎么办?
请带上资源链接地址联系客服,工作时间内我们看到后将第一时间回复。
关于解压密码
本站资源一般都没有加密,如果发现需要解压密码的,那么就输入 hao.35dc.com 试试。

发表评论

资源库,由老程序员细心甄别、精心筛选,只为提供优质的源码资源

关于我们 联系我们