自学内容网 自学内容网

【Java实现MySQL 数据库导出 Excel 表的方法详解】

MySQL 数据库导出 Excel 表的方法详解

在日常开发中,我们经常需要将数据库中的数据导出为 Excel 文件,以便进行数据分析或分享给其他同事。本文将详细介绍如何从 MySQL 数据库导出数据并生成 Excel 文件,具体实现将基于 Java 语言和 Spring Boot 框架。

环境准备

在开始之前,请确保你已经安装了以下工具和库:

  • Java Development Kit (JDK): 用于编写和运行 Java 应用程序。
  • Spring Boot: 一个快速构建独立的、生产级别的基于 Spring 框架的应用程序的框架。
  • Apache POI: 一个用于读取和写入 Microsoft Office 格式文件的 Java 库,特别适合处理 Excel 文件。
  • MySQL: 一个广泛使用的开源关系型数据库管理系统。

项目结构

假设我们的项目结构如下:

productmanage
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── ts
│   │   │           ├── controller
│   │   │           │   └── ProductAdInfoController.java
│   │   │           ├── service
│   │   │           │   └── ProductService.java
│   │   │           └── utils
│   │   │               └── ExcelUtils.java
│   │   └── resources
│   │       └── application.properties
└── pom.xml

依赖配置

pom.xml 文件中添加 Apache POI 的依赖:

<dependencies>
    <!-- 其他依赖 -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>4.1.2</version>
    </dependency>
</dependencies>

服务层实现

ProductService 中定义一个方法来查询数据库中的活动广告数据:

package com.ts.service;

import com.ts.dto.ProductAdInfoDTO;
import java.util.List;

public interface ProductService {
    List<ProductAdInfoDTO> listActiveProductAdInfos();
}

实用工具类

创建一个 ExcelUtils 类来处理 Excel 文件的创建和写入操作:

package com.ts.utils;

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;

public class ExcelUtils {

    public static void createTableHeader(Sheet sheet, int rowIndex, String[] headers) {
        Row row = sheet.createRow(rowIndex);
        CellStyle style = sheet.getWorkbook().createCellStyle();
        style.setAlignment(HorizontalAlignment.CENTER);

        for (int i = 0; i < headers.length; i++) {
            Cell cell = row.createCell(i);
            cell.setCellValue(headers[i]);
            cell.setCellStyle(style);
        }
    }

    public static void setCell(Row row, int cellIndex, String value) {
        Cell cell = row.createCell(cellIndex);
        cell.setCellValue(value);
    }

    public static void setResHeader(String fileName, HttpServletResponse response) throws IOException {
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
        String encodedFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
        response.setHeader("Content-Disposition", "attachment;filename=" + encodedFileName + ".xlsx");
    }

    public static void returnWorkbook(Workbook workbook, HttpServletResponse response) throws IOException {
        workbook.write(response.getOutputStream());
        workbook.close();
    }
}

控制器实现

ProductAdInfoController 中实现导出 Excel 的接口:

package com.ts.controller;

import com.ts.dto.ProductAdInfoDTO;
import com.ts.service.ProductService;
import com.ts.utils.ExcelUtils;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

@RestController
public class ProductAdInfoController {

    @Autowired
    private ProductService service;

    @GetMapping("file-export")
    public void exportExcels(HttpServletResponse resp) {
        Workbook wb = new SXSSFWorkbook();
        CellStyle style = wb.createCellStyle();
        style.setAlignment(HorizontalAlignment.CENTER);
        Sheet sheet = wb.createSheet("数据");
        int index = 0;

        // 创建表头
        ExcelUtils.createTableHeader(sheet, index++, new String[]{"AID", "BID", "PName"});

        // 查询数据
        List<ProductAdInfoDTO> productAdInfos = service.listActiveProductAdInfos();

        // 写入数据
        for (ProductAdInfoDTO adInfoDTO : productAdInfos) {
            Row row = sheet.createRow(index++);
            int i = 0;
            ExcelUtils.setCell(row, i++, String.valueOf(adInfoDTO.getFacebookId()));
            ExcelUtils.setCell(row, i++, String.valueOf(adInfoDTO.getAccountId()));
            ExcelUtils.setCell(row, i++, String.valueOf(adInfoDTO.getPid()));
        }

        // 设置响应头并返回工作簿
        try {
            ExcelUtils.setResHeader("数据", resp);
            ExcelUtils.returnWorkbook(wb, resp);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

配置文件

application.properties 文件中配置数据库连接信息:

spring.datasource.url=jdbc:mysql://localhost:3306/your_database
spring.datasource.username=your_username
spring.datasource.password=your_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

测试

启动应用后,访问 /file-export 接口,即可下载包含广告数据的 Excel 文件。

总结

通过本文的介绍,你应该能够轻松地将 MySQL 数据库中的数据导出为 Excel 文件。主要步骤包括:

  1. 添加必要的依赖。
  2. 创建服务层方法查询数据。
  3. 编写实用工具类处理 Excel 文件的创建和写入。
  4. 在控制器中实现导出接口。
  5. 配置数据库连接信息。

希望本文对你有所帮助!如果有任何问题或建议,欢迎留言交流。


原文地址:https://blog.csdn.net/weixin_63130017/article/details/144284514

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!