Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Hiển thị tất cả bảng trong database MySQL bằng Java JDBC


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ả
catalognullTên catalog (MySQL: database name), null = tất cả
schemaPatternnullSchema pattern, null = tất cả
tableNamePatternnullPattern 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=UTC tránh warning
  • Đóng kết nối trong finally hoặc try-with-resources
  • Quyền: User cần quyền SHOW DATABASES hoặc SELECT trên information_schema