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

JDBC 實戰進階:DatabaseMetaData 動態探索未知資料庫結構

     編輯:Java 相關知識

場景

接手陌生資料庫(如朋友公司的 "titanium" DB),無文檔、無 ER 圖,需快速掌握表結構、欄位、索引、預存程序。

核心 API:DatabaseMetaData


Connection conn = ...; // 已建立連線
DatabaseMetaData meta = conn.getMetaData();

// 基本資訊
meta.getURL();              // 連線 URL
meta.getUserName();         // 當前用戶
meta.isReadOnly();          // 唯讀?
meta.getDatabaseProductName(); // 產品名
meta.getDatabaseProductVersion(); // 版本
meta.getDriverName();       // 驅動名
meta.getDriverVersion();    // 驅動版本

掃描所有表/視圖/同義詞


// 參數皆為 null 表示全掃描
ResultSet tables = meta.getTables(null, null, null, null);
// 類型篩選:new String[]{"TABLE", "VIEW", "SYSTEM TABLE", ...}

ResultSetMetaData rsmd = tables.getMetaData();
int cols = rsmd.getColumnCount();
// 列印標題
for (int i=1; i<=cols; i++) System.out.print(rsmd.getColumnLabel(i) + "\t");
System.out.println();
// 列印資料
while (tables.next()) {
    for (int i=1; i<=cols; i++) System.out.print(tables.getString(i) + "\t");
    System.out.println();
}

關鍵欄位:TABLE_CAT, TABLE_SCHEM, TABLE_NAME, TABLE_TYPE, REMARKS。

深入欄位細節:getColumns


ResultSet cols = meta.getColumns(null, null, "EMPLOYEE", null);
// 比 ResultSetMetaData 更豐富:
// COLUMN_SIZE, DECIMAL_DIGITS, NUM_PREC_RADIX, COLUMN_DEF (預設值), ORDINAL_POSITION, IS_NULLABLE, ...

預存程序與索引


// 預存程序
ResultSet procs = meta.getProcedures(null, null, null);
// PROCEDURE_CAT, PROCEDURE_SCHEM, PROCEDURE_NAME, ...

// 索引
ResultSet idx = meta.getIndexInfo(null, null, "EMPLOYEE", false, true);
// TABLE_CAT, TABLE_SCHEM, TABLE_NAME, NON_UNIQUE, INDEX_QUALIFIER, INDEX_NAME, TYPE, ORDINAL_POSITION, COLUMN_NAME, ...

實用小工具:自動生成實體類別骨架

結合 getColumns 與 Velocity/FreeMarker 模板,可一鍵生成 JPA Entity / MyBatis Mapper / DTO 類別,消除手寫錯誤。

注意事項

  • 不同資料庫/驅動對 MetaData 支援程度不同,需實測驗證。
  • 大型資料庫全掃描較慢,建議加 TABLE_NAME_PATTERN 篩選。
  • 權限不足可能導致部分資訊不可見。
DatabaseMetaData 是 JDBC 的「瑞士刀」,讓你在完全陌生的環境裡也能像在自家後院一樣掌握全貌。善用它,做資料庫遷移、逆向工程、文檔生成的利器。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved