// 1. 獲取所有表名
List<String> tables = new ArrayList<>();
ResultSet rs = stmt.executeQuery("SHOW TABLES");
while (rs.next()) tables.add(rs.getString(1));
// 2. 逐表 COUNT(*)
long sum = 0;
for (String tbl : tables) {
ResultSet rs2 = stmt.executeQuery("SELECT COUNT(*) FROM " + tbl);
if (rs2.next()) sum += rs2.getLong(1);
}
優點:邏輯直觀;缺點:大量表時網路往返多、耗時長。
String sql = "SELECT TABLE_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES " +
"WHERE TABLE_SCHEMA = ? ORDER BY TABLE_ROWS DESC";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, dbName);
ResultSet rs = ps.executeQuery();
long sum = 0;
while (rs.next()) sum += rs.getLong("TABLE_ROWS");
優點:單次查詢、無需鎖表、秒級返回。注意:TABLE_ROWS 為統計估算值(InnoDB),非精確值;精確統計仍需 COUNT(*)。
startMySQLConn():載入驅動、建立連線getTables() / useDB():獲取表名或切換至 information_schemagetDbSum():核心統計邏輯closeMySQLConn():釋放資源TABLE_ROWS)。COUNT(*)),可並行化加速。