Java 导出数据库表结构到 Excel 文件

在实际开发中,有时我们需要将数据库中的表结构导出到 Excel 文件中,方便查阅和备份。本文将介绍如何使用 Java 实现这一功能,并提供代码示例。

1. 准备工作

首先,我们需要导入相关的依赖包。这里我们使用 Apache POI 库来操作 Excel 文件,所以需要引入以下依赖:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.1.2</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.2</version>
</dependency>

然后,我们需要连接到数据库。这里以 MySQL 数据库为例,使用 JDBC 连接数据库。需要确保已经正确导入 MySQL 的 JDBC 驱动包。

2. 导出表结构到 Excel

接下来,我们开始编写导出表结构的代码。首先,创建一个类,命名为 TableStructureExporter。在该类中,我们定义一个 export 方法,用来导出指定数据库的所有表结构。

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileOutputStream;
import java.sql.*;

public class TableStructureExporter {

    public static void export(String url, String username, String password, String databaseName, String outputPath) throws Exception {
        try (Connection conn = DriverManager.getConnection(url, username, password);
             Statement stmt = conn.createStatement()) {

            ResultSet tables = stmt.executeQuery("SHOW TABLES IN " + databaseName);

            Workbook workbook = new XSSFWorkbook();
            Sheet sheet = workbook.createSheet("Table Structure");

            int rowNum = 0;

            // 创建表头
            Row headerRow = sheet.createRow(rowNum++);
            headerRow.createCell(0).setCellValue("Table Name");
            headerRow.createCell(1).setCellValue("Column Name");
            headerRow.createCell(2).setCellValue("Data Type");
            headerRow.createCell(3).setCellValue("Nullable");
            headerRow.createCell(4).setCellValue("Primary Key");

            // 导出每个表的结构
            while (tables.next()) {
                String tableName = tables.getString(1);

                ResultSet columns = stmt.executeQuery("SHOW COLUMNS FROM " + databaseName + "." + tableName);

                while (columns.next()) {
                    Row row = sheet.createRow(rowNum++);
                    row.createCell(0).setCellValue(tableName);
                    row.createCell(1).setCellValue(columns.getString("Field"));
                    row.createCell(2).setCellValue(columns.getString("Type"));
                    row.createCell(3).setCellValue(columns.getString("Null"));
                    row.createCell(4).setCellValue(columns.getString("Key"));
                }

                columns.close();
            }

            tables.close();

            // 调整列宽
            for (int i = 0; i < 5; i++) {
                sheet.autoSizeColumn(i);
            }

            // 保存文件
            try (FileOutputStream outputStream = new FileOutputStream(outputPath)) {
                workbook.write(outputStream);
            }
        }
    }

    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306";
        String username = "root";
        String password = "password";
        String databaseName = "your_database_name";
        String outputPath = "output.xlsx";

        try {
            export(url, username, password, databaseName, outputPath);
            System.out.println("Table structure exported successfully.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在上述代码中,我们使用 JDBC 连接到数据库,并执行 SQL 查询获取表结构信息。然后,我们使用 Apache POI 创建一个 Excel 文件,并将表结构信息写入到文件中。最后,我们将文件保存到指定路径。

3. 运行代码

将上述代码保存为 TableStructureExporter.java 文件,并编译运行。确保已经正确配置了数据库连接信息,并替换代码中的相关参数。运行结果将在控制台输出导出成功的提示信息,并在指定路径生成一个名为 output.xlsx 的 Excel 文件。

总结

本文介绍了如何使用 Java 导出数据库表结构到 Excel 文件的方法。通过使用 JDBC 连接数据库,并使用 Apache POI 操作 Excel 文件,我们可以轻松地导出表结构信息。希望本文对你有所帮助。