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

Java ResultSet에서 열 이름 가져오기 – MySQL JDBC 메타데이터 활용법

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 쿼리를 직접 작성하지 않고도 결과 집합의 열 정보를 동적으로 얻을 수 있습니다. 이 기법은 범용 데이터 조회 도구나 동적 리포트 생성 등 열 구조가 고정되지 않은 상황에서 특히 유용하게 활용됩니다.