在開發中常需動態獲取表清單,本文匯總 JDBC 標準 API 及主流資料庫原生 SQL 兩種路徑。
public void getTableNames(Connection con) {
try {
DatabaseMetaData meta = con.getMetaData();
// 只查 TABLE 類型,排除 VIEW、SYSTEM TABLE 等
ResultSet rs = meta.getTables(null, null, null, new String[]{"TABLE"});
while (rs.next()) {
System.out.println("表名:" + rs.getString("TABLE_NAME"));
System.out.println("擁有者:" + rs.getString("TABLE_SCHEM"));
System.out.println("------------------------------");
}
con.close();
} catch (Exception e) {
try { if (con != null) con.close(); } catch (SQLException ignored) {}
e.printStackTrace();
}
}
關鍵點: getTables(catalog, schemaPattern, tableNamePattern, types[]),types 可為 TABLE、VIEW、SYSTEM TABLE 等。
| 資料庫 | SQL |
|---|---|
| MySQL | SHOW TABLES; |
| Oracle | SELECT object_name FROM user_objects WHERE object_type = 'TABLE'; |
| SQL Server | SELECT name FROM sysobjects WHERE xtype = 'U'; (2000/2005+) |
| Sybase | SELECT name FROM sysobjects WHERE type = 'U'; |
| DB2 | SELECT tabname FROM syscat.tables WHERE tabschema = CURRENT SCHEMA; |
DatabaseMetaData,屏蔽差異。參考:https://hi.baidu.com/rybwxn/blog/item/1a59502a75a7de25d52af1cc.html