ResultSetMetaData란 무엇인가?
JDBC에서 ResultSetMetaData는 SQL 실행 후 얻은 ResultSet 객체의 구조 정보를 제공하는 인터페이스입니다. 이를 활용하면 코드를 직접 확인하지 않고도 다음과 같은 메타데이터를 동적으로 파악할 수 있습니다.
- 결과 집합에 포함된 컬럼(열)의 개수
- 각 컬럼의 이름 및 레이블
- 컬럼의 데이터 타입
- 데이터가 속한 테이블 이름
ResultSet 객체에서 getMetaData() 메서드를 호출하면 ResultSetMetaData 인스턴스를 손쉽게 얻을 수 있습니다.
ResultSetMetaData의 주요 메서드
자주 사용되는 대표적인 메서드는 다음과 같습니다.
| 메서드 | 설명 |
|---|---|
| getColumnCount() | 현재 ResultSet 객체에 포함된 컬럼의 개수를 반환합니다. |
| getColumnLabel() | SQL의 AS 절 등으로 지정된 컬럼의 권장 이름(레이블)을 반환합니다. |
| getColumnName() | 데이터베이스에 저장된 실제 컬럼 이름을 반환합니다. |
| getTableName() | 해당 컬럼이 속한 테이블의 이름을 반환합니다. |
사용 예제
다음은 MySQL 데이터베이스에 연결한 뒤, Dataset 테이블을 조회하고 ResultSetMetaData로 컬럼 정보를 출력하는 전체 예제입니다.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
public class ResultSetMetadataExample {
public static void main(String args[]) throws Exception {
// 드라이버 등록
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
// 데이터베이스 연결
String mysqlUrl = "jdbc:mysql://localhost/TestDB";
Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
System.out.println("Connection established......");
// Statement 객체 생성
Statement stmt = con.createStatement();
// 데이터 조회
ResultSet rs = stmt.executeQuery("select * from Dataset");
ResultSetMetaData rsMetaData = rs.getMetaData();
// 컬럼 개수 출력
System.out.println("Number of columns: " + rsMetaData.getColumnCount());
// 컬럼 레이블 출력
System.out.println("Column Label: " + rsMetaData.getColumnLabel(1));
// 컬럼 이름 출력
System.out.println("Column Name: " + rsMetaData.getColumnName(1));
// 테이블 이름 출력
System.out.println("Table Name: " + rsMetaData.getTableName(1));
}
}실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
Connection established...... Number of columns: 2 Column Label: mobile_brand Column Name: mobile_brand Table Name: dataset
ResultSetMetaData가 중요한 이유
ResultSetMetaData는 쿼리 결과의 구조를 실행 시점에 동적으로 알아낼 수 있게 해준다는 점에서 매우 유용합니다. 대표적인 활용 사례는 다음과 같습니다.
- 범용 데이터 조회 도구 개발: 테이블 구조를 미리 알지 못해도 화면에 결과를 자동으로 표시할 수 있습니다.
- 동적 보고서 생성: 엑셀이나 CSV 내보내기처럼 컬럼 구성이 유동적인 기능을 구현할 때 필수적입니다.
- 데이터 검증: 컬럼 개수와 타입을 확인하여 애플리케이션 로직에서 안전하게 데이터를 처리할 수 있습니다.
이처럼 ResultSetMetaData를 활용하면 하드코딩 없이 유연하고 확장 가능한 JDBC 기반 애플리케이션을 작성할 수 있습니다.