技術棧
- JDBC
DatabaseMetaData 獲取表結構
- Apache POI (HSSF) 生成 .xls 文件
核心步驟
- 獲取所有表名:
DatabaseMetaData meta = conn.getMetaData();
ResultSet rs = meta.getTables(dbName, dbName, null, new String[]{"TABLE"});
while(rs.next()) tables.add(rs.getString("TABLE_NAME"));
- 遍歷每張表,創建 Sheet:Sheet 名 = 表名。
- 查詢表數據:
SELECT * FROM db.table。
- 解析 ResultSetMetaData 寫入表頭:列名作為第一行。
- 遍歷結果集寫入數據行:
rs.getString(i) 統一按文本處理。
- 輸出文件:
workbook.write(new FileOutputStream("db.xls"))。
完整代碼
@Test
public void export() throws Exception {
String dbName = "focus";
HSSFWorkbook book = new HSSFWorkbook();
Connection con = DataSourceUtils.getConn();
Statement st = con.createStatement();
DatabaseMetaData dmd = con.getMetaData();
ResultSet rs = dmd.getTables(dbName, dbName, null, new String[]{"TABLE"});
List tables = new ArrayList<>();
while(rs.next()) tables.add(rs.getString("TABLE_NAME"));
for(String table : tables) {
HSSFSheet sheet = book.createSheet(table);
ResultSet data = st.executeQuery("SELECT * FROM " + dbName + "." + table);
ResultSetMetaData rsmd = data.getMetaData();
int cols = rsmd.getColumnCount();
// 表頭
HSSFRow header = sheet.createRow(0);
for(int i=0; i
擴展建議
- 大數據量場景改用
SXSSFWorkbook (POI 流式 API) 防止 OOM。
- 根據
rsmd.getColumnType() 設置單元格類型(數值、日期、布爾),提升 Excel 可用性。
- 添加列寬自適應:
sheet.autoSizeColumn(i)。
- 支持 .xlsx 格式請引入
poi-ooxml 並使用 XSSFWorkbook。