Java
中连接MySQL
数据库并将所有表的结构输出到Excel
文件中,每个表的结构放在单独的Sheet
页中,并以表名命名Sheet页。基于Apache POI
轻松生成一个包含所有表结构的Excel文件,非常适合数据库文档生成和审查。
引入依赖
xml
<dependencies>
<!-- MySQL JDBC驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.32</version>
</dependency>
<!-- Apache POI 用于操作Excel文件 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
<!-- Apache POI 用于操作Word文件 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.1.2</version>
</dependency>
<!-- XMLBeans依赖 -->
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<version>5.1.1</version>
</dependency>
</dependencies>
连接MySQL并获取表结构,写入文件
java
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Arrays;
import java.util.List;
public class ExportDatabaseStructure {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/database";
String username = "username";
String password = "password";
try (Connection conn = DriverManager.getConnection(url, username, password)) {
String[] tables = getTables(conn);
exportToExcel(conn, tables);
exportToWord(conn, tables);
} catch (Exception e) {
e.printStackTrace();
}
}
private static String[] getTables(Connection conn) throws Exception {
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SHOW TABLES");
List<String> tables = new java.util.ArrayList<>();
while (rs.next()) {
tables.add(rs.getString(1));
}
return tables.toArray(new String[0]);
}
private static void exportToExcel(Connection conn, String[] tables) throws Exception {
Workbook workbook = new XSSFWorkbook();
for (String table : tables) {
Sheet sheet = workbook.createSheet(table);
exportTableStructure(conn, table, (tableName, rs) -> {
Row header = sheet.createRow(0);
String[] headers = {"Column", "Type", "Null", "Key", "Default", "Extra"};
for (int i = 0; i < headers.length; i++) {
Cell cell = header.createCell(i);
cell.setCellValue(headers[i]);
}
int rowIndex = 1;
while (rs.next()) {
Row row = sheet.createRow(rowIndex++);
row.createCell(0).setCellValue(rs.getString("Field"));
row.createCell(1).setCellValue(rs.getString("Type"));
row.createCell(2).setCellValue(rs.getString("Null"));
row.createCell(3).setCellValue(rs.getString("Key"));
row.createCell(4).setCellValue(rs.getString("Default"));
row.createCell(5).setCellValue(rs.getString("Extra"));
}
});
}
try (FileOutputStream fileOut = new FileOutputStream("DatabaseStructure.xlsx")) {
workbook.write(fileOut);
}
workbook.close();
}
private static void exportToWord(Connection conn, String[] tables) throws Exception {
XWPFDocument document = new XWPFDocument();
for (String table : tables) {
document.createParagraph().createRun().setText("Table: " + table);
XWPFTable wordTable = document.createTable();
// Create header row
XWPFTableRow headerRow = wordTable.getRow(0);
List<String> headers = Arrays.asList("Column", "Type", "Null", "Key", "Default", "Extra");
for (int i = 0; i < headers.size(); i++) {
if (i == 0) {
headerRow.getCell(0).setText(headers.get(i));
} else {
headerRow.addNewTableCell().setText(headers.get(i));
}
}
exportTableStructure(conn, table, (tableName, rs) -> {
while (rs.next()) {
XWPFTableRow row = wordTable.createRow();
row.getCell(0).setText(rs.getString("Field"));
row.getCell(1).setText(rs.getString("Type"));
row.getCell(2).setText(rs.getString("Null"));
row.getCell(3).setText(rs.getString("Key"));
row.getCell(4).setText(rs.getString("Default"));
row.getCell(5).setText(rs.getString("Extra"));
}
});
}
try (FileOutputStream out = new FileOutputStream("DatabaseStructure.docx")) {
document.write(out);
}
document.close();
}
private static void exportTableStructure(Connection conn, String table, TableStructureConsumer consumer) throws Exception {
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SHOW COLUMNS FROM " + table);
consumer.accept(table, rs);
}
@FunctionalInterface
private interface TableStructureConsumer {
void accept(String tableName, ResultSet rs) throws Exception;
}
}