ResultSetMetaData
는 JDBC에서 ResultSet
객체의 메타데이터를 제공하는 인터페이스로, SQL 쿼리 결과에 포함된 열(column)에 대한 정보를 동적으로 조회할 수 있도록 합니다. 이는 특히 열 이름, 열 타입, 열 크기 등을 알아야 하거나, 쿼리 결과에 따라 다르게 처리해야 할 때 유용합니다. ResultSetMetaData
를 사용하면 사전에 열 정보를 모르는 상태에서도 쿼리 결과를 동적으로 처리할 수 있습니다.
ResultSetMetaData
객체 생성 및 사용법ResultSetMetaData
객체는 ResultSet
에서 getMetaData()
메서드를 호출하여 생성할 수 있습니다.
ResultSet rs = stmt.executeQuery("SELECT * FROM emp");
ResultSetMetaData rsmd = rs.getMetaData();
ResultSet
의 열 개수를 반환합니다.VARCHAR
, INTEGER
등).NULL
값을 허용하는지 여부를 반환합니다.package com.exam;
import java.sql.*;
public class ResultSetMataDataEx01 {
public static void main(String[] args) {
String url = "jdbc:mariadb://localhost:3306/sample";
String user = "root";
String password = "123456";
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
Class.forName("org.mariadb.jdbc.Driver");
conn = DriverManager.getConnection(url, user, password);
String sql = "select empno, ename, sal, hiredate from emp";
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData(); // select 후 rs 통해 테이블 정보 가져오기
System.out.println(rsmd.getColumnCount()); // 컬럼의 갯수 - 8(select문 기준)
// desc emp;
for (int i = 1; i <= rsmd.getColumnCount(); i++) {
System.out.print(rsmd.getColumnName(i) + "\t"); // 컬럼 이름 얻기(select문 기준)
System.out.print(rsmd.getColumnTypeName(i) + "\t"); // 컬럼의 타입
System.out.println(rsmd.getColumnDisplaySize(i)); // 컬럼의 크기
}
} catch (ClassNotFoundException e) {
System.out.println("[에러] " + e.getMessage());
} catch (SQLException e) {
System.out.println("[에러] " + e.getMessage());
} finally {
if (rs != null) {try {rs.close();} catch (SQLException e) {e.printStackTrace();}}
if (pstmt != null) {try {pstmt.close();} catch (SQLException e) {e.printStackTrace();}}
if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}
}
}
}