이 글에서는 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 애플리케이션 내에서도 별도의 외부 도구 없이 데이터베이스의 전체 테이블 구조를 손쉽게 파악할 수 있습니다. 이 방법은 데이터베이스 스키마 분석, 마이그레이션 도구 개발, 동적 쿼리 생성 등 다양한 상황에서 유용하게 활용됩니다.