Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

Java로 MySQL 데이터베이스의 모든 테이블 목록 조회하기

이 글에서는 Java를 사용하여 MySQL 데이터베이스 내부의 모든 테이블을 조회하고 출력하는 방법을 단계별로 살펴봅니다. MySQL에서는 SHOW TABLES 명령어로 데이터베이스의 테이블 목록을 확인할 수 있는데, Java에서는 JDBC가 제공하는 DatabaseMetaData 인터페이스를 활용하면 동일한 결과를 프로그래밍 방식으로 얻을 수 있습니다.

핵심 원리 이해하기

Java에서 데이터베이스 연결을 생성하면 Connection 객체의 getMetaData() 메서드를 통해 해당 데이터베이스의 메타데이터(구조 정보)에 접근할 수 있습니다. 여기서 getTables() 메서드를 호출하면 지정된 유형의 객체 목록을 ResultSet 형태로 반환받으며, 두 번째 매개변수에 "TABLE"을 전달하면 뷰(View)가 아닌 실제 테이블만 필터링됩니다.

Java 코드 예제

아래 예제는 'test'라는 이름의 데이터베이스에 연결한 후, 포함된 모든 테이블의 이름을 출력하는 전체 코드입니다.

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 {
            try {
                Class.forName("com.mysql.jdbc.Driver");
            } catch (Exception e) {
                System.out.println(e);
            }
            conn = (Connection) DriverManager.getConnection(
                "jdbc:mysql://localhost/test", "Manish", "123456");
            System.out.println("Connection is created successfully:");
        } catch (Exception e) {
            System.out.println(e);
        }
        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 ");
    }
}

코드 주요 흐름 정리


1. Class.forName()으로 MySQL JDBC 드라이버를 로드합니다.
2. DriverManager.getConnection()으로 'test' 데이터베이스에 연결을 설정합니다.
3. conn.getMetaData()로 데이터베이스 메타데이터 객체를 가져옵니다.
4. meta.getTables(null, null, null, {"TABLE"})을 호출해 테이블 목록을 조회합니다.
5. ResultSet을 순회하며 TABLE_NAME 컬럼 값을 하나씩 출력하고 개수를 집계합니다.

실행 결과

위 코드를 실행하면 'test' 데이터베이스에 존재하는 모든 테이블 이름이 출력됩니다. 결과는 다음과 같습니다(일부 발췌).

Connection is created successfully:
All table names are in test database:
add30minutesdemo
addcolumn
addoneday
agecalculatesdemo
aliasdemo
allcharacterbeforespace
allownulldemo
appendingdatademo
autoincrementdemo
betweendatedemo
...
zipcodepadwithzerodemo

103 Rows in set

출력 결과를 보면 총 103개의 테이블이 조회된 것을 확인할 수 있습니다. 참고로 SSL 관련 경고 메시지가 함께 출력될 수 있는데, 이는 MySQL 5.5.45+, 5.6.26+, 5.7.6+ 버전부터 기본적으로 SSL 연결을 요구하기 때문입니다. 연결 URL에 useSSL=false 옵션을 추가하거나 신뢰 저장소(truststore)를 설정하면 해결할 수 있습니다.

MySQL 명령어로 결과 교차 검증하기

Java 코드의 결과가 정확한지 확인하려면 MySQL 클라이언트에서 SHOW TABLES 명령어를 직접 실행해 비교해 볼 수 있습니다.

mysql> use test;
Database changed
mysql> show tables;

실행 결과는 다음과 같습니다(일부 발췌).

+------------------------------+
| Tables_in_test               |
+------------------------------+
| add30minutesdemo             |
| addcolumn                    |
| addoneday                    |
| agecalculatesdemo            |
| aliasdemo                    |
| allcharacterbeforespace      |
| allownulldemo                |
| appendingdatademo            |
| autoincrementdemo            |
| betweendatedemo              |
| ...                          |
| zipcodepadwithzerodemo       |
+------------------------------+
103 rows in set (0.01 sec)

결론

위 두 가지 방법의 결과를 비교해 보면, Java의 DatabaseMetaData.getTables()를 사용한 조회 결과와 MySQL의 SHOW TABLES 명령어 실행 결과가 완전히 동일함을 알 수 있습니다. 즉, Java 애플리케이션 내에서도 별도의 외부 도구 없이 데이터베이스의 전체 테이블 구조를 손쉽게 파악할 수 있습니다. 이 방법은 데이터베이스 스키마 분석, 마이그레이션 도구 개발, 동적 쿼리 생성 등 다양한 상황에서 유용하게 활용됩니다.