Java에서 ResultSet으로 조회한 데이터의 열(컬럼) 이름을 확인하고 싶다면 getMetaData() 메서드를 사용하면 됩니다. 이 메서드는 결과 집합의 구조 정보를 담고 있는 ResultSetMetaData 객체를 반환합니다.
getMetaData() 메서드의 원형
ResultSetMetaData getMetaData throws SQLException;
이 메서드는 SQLException을 던질 수 있으므로 반드시 예외 처리를 해주어야 합니다.
예제 테이블 생성하기
먼저 열 이름이 5개인 MySQL 테이블을 생성해 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.
mysql> create table javagetallcolumnnames -> ( -> Id int NOT NULL AUTO_INCREMENT, -> Name varchar(20), -> Age int, -> Salary float, -> Address varchar(100), -> PRIMARY KEY(Id) -> ); Query OK, 0 rows affected (1.34 sec)
위 테이블은 Id, Name, Age, Salary, Address라는 5개의 열로 구성되어 있으며, Id가 기본 키로 설정되어 자동 증가됩니다.
ResultSet에서 열 이름을 가져오는 Java 코드
다음은 ResultSet에서 모든 열 이름을 가져오는 전체 Java 코드입니다.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import com.mysql.jdbc.ResultSetMetaData;
public class GetAllColumnNames {
public static void main(String[] args) {
String JdbcURL="jdbc:mysql://localhost:3306/test?useSSL=false";
String Username="root";
String password="123456";
Connection con=null;
Statement stmt=null;
ResultSet rs;
try {
con = DriverManager.getConnection(JdbcURL, Username, password);
stmt=con.createStatement();
rs = stmt.executeQuery("SELECT *FROM javagetallcolumnnames");
ResultSetMetaData md = (ResultSetMetaData) rs.getMetaData();
int counter = md.getColumnCount();
String colName[] = new String[counter];
System.out.println("The column names are as follows:");
for (int loop = 1; loop <= counter; loop++) {
colName[loop-1] = md.getColumnLabel(loop);
System.out.println(colName[loop-1]);
}
} catch(Exception e) {
e.printStackTrace();
}
}
}코드 동작 방식 설명
코드의 핵심 흐름을 단계별로 살펴보면 다음과 같습니다.
1. 데이터베이스 연결: DriverManager.getConnection()을 사용해 JDBC URL, 사용자명, 비밀번호를 통해 MySQL 서버에 연결합니다.
2. 쿼리 실행: Statement 객체로 SELECT * 쿼리를 실행하여 ResultSet을 얻습니다.
3. 메타데이터 추출: rs.getMetaData()를 호출해 ResultSetMetaData 객체를 가져옵니다.
4. 열 개수 확인: getColumnCount() 메서드로 전체 열 개수를 구합니다.
5. 열 이름 출력: 인덱스가 1부터 시작한다는 점에 유의하여 루프를 돌며 getColumnLabel()로 각 열의 이름을 가져와 출력합니다.
참고: JDBC의 인덱스는 배열과 달리 1부터 시작합니다. 따라서 루프 변수를 1부터 counter까지 순회해야 하며, 배열에 저장할 때는 loop - 1을 인덱스로 사용합니다.
실행 결과
위 코드를 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.
The column names are as follows: Id Name Age Salary Address
테이블 생성 시 정의한 5개의 열 이름(Id, Name, Age, Salary, Address)이 순서대로 출력되는 것을 볼 수 있습니다.
마무리
이처럼 getMetaData()와 getColumnLabel() 메서드를 조합하면 SQL 쿼리를 직접 작성하지 않고도 결과 집합의 열 정보를 동적으로 얻을 수 있습니다. 이 기법은 범용 데이터 조회 도구나 동적 리포트 생성 등 열 구조가 고정되지 않은 상황에서 특히 유용하게 활용됩니다.