[Day 14 | DB] JDBC - ResultSetMetaData

y♡ding·2024년 10월 31일
0

데브코스 TIL

목록 보기
91/163

ResultSetMetaData는 JDBC에서 ResultSet 객체의 메타데이터를 제공하는 인터페이스로, SQL 쿼리 결과에 포함된 열(column)에 대한 정보를 동적으로 조회할 수 있도록 합니다. 이는 특히 열 이름, 열 타입, 열 크기 등을 알아야 하거나, 쿼리 결과에 따라 다르게 처리해야 할 때 유용합니다. ResultSetMetaData를 사용하면 사전에 열 정보를 모르는 상태에서도 쿼리 결과를 동적으로 처리할 수 있습니다.

ResultSetMetaData

ResultSetMetaData 객체 생성 및 사용법

ResultSetMetaData 객체는 ResultSet에서 getMetaData() 메서드를 호출하여 생성할 수 있습니다.

ResultSet rs = stmt.executeQuery("SELECT * FROM emp");
ResultSetMetaData rsmd = rs.getMetaData();

주요 메서드

  • getColumnCount(): ResultSet의 열 개수를 반환합니다.
  • getColumnName(int column): 열 이름을 반환합니다.
  • getColumnTypeName(int column): 열의 SQL 타입을 반환합니다 (예: VARCHAR, INTEGER 등).
  • isNullable(int column): 해당 열이 NULL 값을 허용하는지 여부를 반환합니다.
  • isAutoIncrement(int column): 해당 열이 자동 증가인지 여부를 확인합니다.

예제

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();}}
        }
    }
}

0개의 댓글

관련 채용 정보