首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 導出數據庫所有表到 Excel(基於 Apache POI)

     編輯:Java 相關知識

技術棧

  • JDBC DatabaseMetaData 獲取表結構
  • Apache POI (HSSF) 生成 .xls 文件

核心步驟

  1. 獲取所有表名:
    DatabaseMetaData meta = conn.getMetaData();
    ResultSet rs = meta.getTables(dbName, dbName, null, new String[]{"TABLE"});
    while(rs.next()) tables.add(rs.getString("TABLE_NAME"));
    
  2. 遍歷每張表,創建 Sheet:Sheet 名 = 表名。
  3. 查詢表數據:SELECT * FROM db.table。
  4. 解析 ResultSetMetaData 寫入表頭:列名作為第一行。
  5. 遍歷結果集寫入數據行:rs.getString(i) 統一按文本處理。
  6. 輸出文件: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。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved