Java怎么快速把数据库数据导出成Excel表格,操作简单又实用
- 问答
- 2026-01-04 22:19:50
- 26
要快速又简单地把数据库数据导出成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常见实践教程的通用步骤总结)

本文由钊智敏于2026-01-04发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://www.haoid.cn/wenda/74583.html
