本例演示使用 DatabaseMetaData 獲取數據庫級元數據:驅動信息、URL、最大行大小、所有表信息、主鍵、外鍵詳情。
public class JDBCDataMeta {
private String url, username, password;
public static void main(String[] args) {
if (args.length != 4) { System.out.println("use: java JDBCDataMeta url username password tablename"); return; }
JDBCDataMeta JDM = new JDBCDataMeta();
JDM.url = args[0]; JDM.username = args[1]; JDM.password = args[2];
JDM.getMeta(JDM.conn(), args[3]);
}
public Connection conn() { ... } // 同前例
public void getMeta(Connection con, String table) {
try {
DatabaseMetaData dbmd = con.getMetaData();
// 1. 驅動與連接信息
System.out.println("dataName=" + dbmd.getDriverName());
System.out.println("dataURL=" + dbmd.getURL());
System.out.println("dataMaxSize=" + dbmd.getMaxRowSize());
// 2. 所有表信息
String[] types = {"TABLE"};
ResultSet results = dbmd.getTables(null, null, "%", types);
while (results.next()) {
System.err.println("TABLE_CAT:" + results.getObject(1));
System.err.println("TABLE_SCHEM:" + results.getObject(2));
System.err.println("TABLE_NAME:" + results.getObject(3));
System.err.println("TABLE_TYPE:" + results.getObject(4));
System.err.println("REMARKS:" + results.getObject(5));
}
// 3. 指定表主鍵
ResultSet pkRSet = dbmd.getPrimaryKeys(null, null, table);
while (pkRSet.next()) {
System.err.println("PK_TABLE_NAME:" + pkRSet.getObject(3));
System.err.println("PK_COLUMN_NAME:" + pkRSet.getObject(4));
System.err.println("KEY_SEQ:" + pkRSet.getObject(5));
System.err.println("PK_NAME:" + pkRSet.getObject(6));
}
// 4. 指定表外鍵(被引用)
results = dbmd.getImportedKeys(null, null, table);
while (results.next()) {
System.err.println("FKTABLE_NAME:" + results.getObject(7));
System.err.println("FKCOLUMN_NAME:" + results.getObject(8));
System.err.println("PKTABLE_NAME:" + results.getObject(3));
System.err.println("PKCOLUMN_NAME:" + results.getObject(4));
System.err.println("FK_NAME:" + results.getObject(12));
}
} catch (SQLException se) { se.printStackTrace(); }
catch (Exception e) { System.out.println(e); }
finally { try { con.close(); } catch (SQLException se) {} }
}
}
| 類別 | 代表方法 | 用途 |
|---|---|---|
| 數據庫信息 | getDriverName、getURL、getDatabaseProductName/Version、getMaxRowSize | 連接環境檢測、兼容性適配 |
| 表/視圖 | getTables、getTableTypes、getTablePrivileges | Schema 瀏覽、代碼生成 |
| 列定義 | getColumns、getColumnPrivileges | 字段詳情、動態表單 |
| 主鍵 | getPrimaryKeys、getBestRowIdentifier | 實體 ID 映射、關聯構建 |
| 外鍵 | getImportedKeys(被引用)、getExportedKeys(引用他表)、getCrossReference | 關係圖譜、級聯操作 |
| 索引 | getIndexInfo | 性能分析、優化建議 |
| 存儲過程 | getProcedures、getProcedureColumns | CallableStatement 參數綁定 |
| 功能支持 | supportsTransactions、supportsBatchUpdates、supportsANSI92EntryLevelSQL 等 | 跨數據庫兼容性判斷 |
getTables(catalog, schemaPattern, tableNamePattern, types[]):模式匹配支援 % (任意字符)、_ (單字符)getPrimaryKeys/ImportedKeys/ExportedKeys(catalog, schema, table):catalog/schema 可為 null 表示全部