Phương pháp: DatabaseMetaData.getTables()
JDBC cung cấp interface DatabaseMetaData để lấy metadata database, bao gồm danh sách bảng.
Mã Java hoàn chỉnh
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.DatabaseMetaData;
public class GetAllTables {
public static void main(String[] args) throws SQLException {
Connection conn = null;
try {
// Load driver (Java 6+ tự động, nhưng explicit an toàn hơn)
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (Exception e) {
System.out.println(e);
}
// Kết nối
conn = (Connection) DriverManager.getConnection(
"jdbc:mysql://localhost/test", "Manish", "123456");
System.out.println("Connection is created successfully:");
} catch (Exception e) {
System.out.println(e);
}
// Lấy metadata
ResultSet rs = null;
DatabaseMetaData meta = (DatabaseMetaData) conn.getMetaData();
rs = meta.getTables(null, null, null, new String[] {"TABLE"});
int count = 0;
System.out.println("All table names are in test database:");
while (rs.next()) {
String tblName = rs.getString("TABLE_NAME");
System.out.println(tblName);
count++;
}
System.out.println(count + " Rows in set");
}
}
Giải thích tham số getTables()
getTables(catalog, schemaPattern, tableNamePattern, types)
| Tham số | Giá trị ví dụ | Mô tả |
|---|---|---|
| catalog | null | Tên catalog (MySQL: database name), null = tất cả |
| schemaPattern | null | Schema pattern, null = tất cả |
| tableNamePattern | null | Pattern tên bảng, null = tất cả |
| types | {"TABLE"} | Loại: "TABLE", "VIEW", "SYSTEM TABLE", "ALIAS", "SYNONYM" |
Kết quả chạy chương trình
Connection is created successfully: All table names are in test database: add30minutesdemo addcolumn addoneday agecalculatesdemo aliasdemo ... zipcodepadwithzerodemo 103 Rows in set
Đối chiếu với MySQL command line
mysql> USE test; Database changed mysql> SHOW TABLES;
+------------------------------+ | Tables_in_test | +------------------------------+ | add30minutesdemo | | addcolumn | | addoneday | | agecalculatesdemo | | aliasdemo | | ... | | zipcodepadwithzerodemo | +------------------------------+ 103 rows in set (0.01 sec)
Cải tiến cho production
Sử dụng try-with-resources (Java 7+)
try (Connection conn = DriverManager.getConnection(url, user, pass)) {
DatabaseMetaData meta = conn.getMetaData();
try (ResultSet rs = meta.getTables(null, "test", "%", new String[]{"TABLE"})) {
while (rs.next()) {
System.out.println(rs.getString("TABLE_NAME"));
}
}
}
Lấy thêm thông tin bảng
while (rs.next()) {
String tableName = rs.getString("TABLE_NAME");
String tableType = rs.getString("TABLE_TYPE"); // TABLE, VIEW
String remarks = rs.getString("REMARKS"); // Comment (nếu có)
System.out.printf("%-30s %-10s %s%n", tableName, tableType, remarks);
}
Lưu ý
- Driver class: MySQL 8.0+ dùng
com.mysql.cj.jdbc.Driver - Connection URL: Thêm
?useSSL=false&serverTimezone=UTCtránh warning - Đóng kết nối trong
finallyhoặc try-with-resources - Quyền: User cần quyền
SHOW DATABASEShoặcSELECTtrêninformation_schema