Java
中连接MySQL
数据库并将所有表的结构输出到Excel
文件中,每个表的结构放在单独的Sheet
页中,并以表名命名Sheet页。基于Apache POI
轻松生成一个包含所有表结构的Excel文件,非常适合数据库文档生成和审查。
引入依赖
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
</dependencies>
连接MySQL并获取表结构,写入文件
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class MySQLToExcel {
public static void main(String[] args) {
// MySQL数据库连接信息
String url = "jdbc:mysql://localhost:3306/database_name"; // 数据库URL
String username = "username"; // 数据库用户名
String password = "password"; // 数据库密码
// 使用try-with-resources自动关闭资源
try (Connection conn = DriverManager.getConnection(url, username, password)) {
// 创建一个用于执行SQL语句的Statement对象
Statement statement = conn.createStatement();
// 执行SHOW TABLES查询以获取数据库中的所有表名
ResultSet tables = statement.executeQuery("SHOW TABLES");
// 创建一个新的Excel工作簿
Workbook workbook = new XSSFWorkbook();
// 遍历所有表名
while (tables.next()) {
// 获取当前表的表名
String tableName = tables.getString(1);
// 执行DESCRIBE查询以获取表的结构
ResultSet tableStructure = statement.executeQuery("DESCRIBE " + tableName);
// 为当前表创建一个新的Sheet,并将表结构写入Sheet
createSheetForTable(workbook, tableName, tableStructure);
}
// 将工作簿保存到文件中
try (FileOutputStream fileOut = new FileOutputStream("database_structure.xlsx")) {
workbook.write(fileOut); // 将工作簿内容写入文件
}
System.out.println("Excel file created successfully!");
} catch (Exception e) {
e.printStackTrace(); // 捕获并打印异常信息
}
}
/**
* 为数据库中的表创建一个Sheet页,并将表结构写入Sheet。
*
* @param workbook Excel工作簿对象
* @param tableName 数据库表的名称
* @param tableStructure 表的结构信息
* @throws Exception 如果发生异常则抛出
*/
private static void createSheetForTable(Workbook workbook, String tableName, ResultSet tableStructure) throws Exception {
// 在工作簿中创建一个以表名命名的Sheet页
Sheet sheet = workbook.createSheet(tableName);
// 创建Sheet的第一行作为表头
Row headerRow = sheet.createRow(0);
String[] headers = {"Field", "Type", "Null", "Key", "Default", "Extra"};
for (int i = 0; i < headers.length; i++) {
Cell cell = headerRow.createCell(i);
cell.setCellValue(headers[i]); // 设置表头的单元格值
}
// 从第二行开始写入表的字段信息
int rowIndex = 1;
while (tableStructure.next()) {
Row row = sheet.createRow(rowIndex++); // 创建一行
for (int i = 0; i < headers.length; i++) {
Cell cell = row.createCell(i);
cell.setCellValue(tableStructure.getString(i + 1)); // 设置单元格值为表结构信息
}
}
}
}