当前位置:首页 > 问答 > 正文

Java怎么快速把数据库数据导出成Excel表格,操作简单又实用

要快速又简单地把数据库数据导出成Excel,用Apache POI库是一个非常主流和实用的选择,虽然这个名字听起来有点技术化,但你可以把它理解成一个专门帮Java程序读写Microsoft办公文档(比如Word、Excel)的工具包,我们这里主要用它的Excel操作部分。(来源:Apache POI官网文档)

你需要把这个工具包拿到你的项目里来,现在最方便的方式是使用Maven这样的项目管理工具,你只需要在你项目的pom.xml文件里,找到dependencies标签,然后在里面加上下面这几行配置,你的项目就会自动从网上下载并管理POI所需要的所有文件了。(来源:Maven中央仓库配置指南)

<dependencies>
    <!-- 这个是POI的核心包 -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>5.2.3</version> <!-- 版本号可以用最新的 -->
    </dependency>
    <!-- 这个是处理新版Excel(.xlsx格式)需要的包 -->
    <dependency>
        <groupId>org.apache.pi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>5.2.3</version>
    </dependency>
</dependencies>

加完之后,如果你的开发工具(比如IDEA或Eclipse)支持Maven,它通常会自己刷新并加载这些新加的库,如果不支持自动刷新,你可能需要手动点一下“重新导入”或者“更新项目”的按钮。

工具包准备好之后,我们就可以开始写代码了,整个过程可以分解成几个清晰的步骤,就像工厂的流水线一样:

第一步,从数据库里把数据捞出来,这个部分你应该很熟悉了,就是用JDBC连接数据库,然后执行一条SQL查询语句,假设我们有一个员工表(employee),里面有id、name、department和salary这几个字段,代码大概长这样:

// 1. 加载数据库驱动,建立连接(这里用伪代码,你的数据库连接信息要填自己的)
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database", "username", "password");
Statement stmt = conn.createStatement();
String sql = "SELECT id, name, department, salary FROM employee";
ResultSet rs = stmt.executeQuery(sql);

第二步,在内存里创建一个全新的Excel工作簿,POI里用XSSFWorkbook这个类来代表一个.xlsx格式的Excel文件,你new一个它出来,就相当于有了一张空白的Excel文件。

// 2. 创建一个Excel工作簿
XSSFWorkbook workbook = new XSSFWorkbook();

第三步,在工作簿里创建一张工作表,一个Excel文件可以有好多张表(Sheet),我们通常先创建第一张。

// 3. 在工作簿中创建一张工作表,并给它起个名字
XSSFSheet sheet = workbook.createSheet("员工信息表");

第四步,制作表头,也就是Excel的第一行,用来放每一列的名称,我们先创建第一行(Row),然后在第一行里创建若干个单元格(Cell),再把“ID”、“姓名”这些文字写进去。

// 4. 创建表头行(第一行)
XSSFRow headerRow = sheet.createRow(0); // 0代表第一行
// 创建表头单元格,并写入内容
headerRow.createCell(0).setCellValue("员工ID");
headerRow.createCell(1).setCellValue("姓名");
headerRow.createCell(2).setCellValue("部门");
headerRow.createCell(3).setCellValue("工资");

第五步,这是最核心的一步,把数据库查出来的数据一行一行地填到Excel里,我们用一个循环来遍历ResultSet里的每一条记录,注意,Excel的行号是从0开始的,但表头已经占了第0行,所以数据要从第1行开始写。

// 5. 遍历数据库结果集,填充数据行
int rowNum = 1; // 从第二行开始(索引为1)
while (rs.next()) {
    // 创建新的一行
    XSSFRow dataRow = sheet.createRow(rowNum++);
    // 从结果集里取出每个字段的值,并设置到对应的单元格里
    // rs.getInt, rs.getString这些方法取决于你数据库字段的类型
    dataRow.createCell(0).setCellValue(rs.getInt("id"));
    dataRow.createCell(1).setCellValue(rs.getString("name"));
    dataRow.createCell(2).setCellValue(rs.getString("department"));
    dataRow.createCell(3).setCellValue(rs.getDouble("salary"));
}

第六步,调整列宽让它看起来更舒服,默认的列宽可能不够,数据长了会显示不全,我们可以让表格根据内容的长度自动调整一个合适的宽度。

// 6. (可选)自动调整列宽,让显示更美观
for (int i = 0; i < 4; i++) { // 假设我们有4列
    sheet.autoSizeColumn(i);
}

第七步,也是最后一步,把我们在内存里创建好的这个Excel工作簿写到硬盘上,变成一个真正的.xlsx文件,这里要用到FileOutputStream,也就是文件输出流。

// 7. 将工作簿写入文件
try (FileOutputStream fileOut = new FileOutputStream("员工信息导出.xlsx")) {
    workbook.write(fileOut);
}

别忘了关闭各种连接和流,释放资源,这是一个好习惯。

// 8. 关闭资源
workbook.close();
rs.close();
stmt.close();
conn.close();

把上面所有这些代码片段组合在一起,放在你的方法里(比如一个叫exportEmployeesToExcel的方法),当你运行它的时候,就会在你项目的根目录(或者你指定的绝对路径下)生成一个名为“员工信息导出.xlsx”的文件,用Excel打开它,就能看到整整齐齐的数据了。

这个方法的好处是步骤清晰,代码直白,你只要跟着一步一步做,就能实现功能,虽然第一次接触可能会觉得有点长,但一旦跑通,以后要修改或者用在其他地方就非常方便了,比如要导出不同的表,你基本上只需要改一下SQL查询语句和表头的内容就可以了。(来源:基于Apache POI常见实践教程的通用步骤总结)

Java怎么快速把数据库数据导出成Excel表格,操作简单又实用