001package org.itsallcode.jdbc.resultset.generic; 002 003import java.sql.*; 004import java.util.ArrayList; 005import java.util.List; 006 007import org.itsallcode.jdbc.UncheckedSQLException; 008 009/** 010 * Represents the metadata of a single column. 011 * 012 * @param columnIndex column index (1 based) 013 * @param name column name 014 * @param label column label 015 * @param type SQL type 016 */ 017public record ColumnMetaData(int columnIndex, String name, String label, ColumnType type) { 018 019 static List<ColumnMetaData> create(final ResultSet resultSet) { 020 try { 021 return create(resultSet.getMetaData()); 022 } catch (final SQLException e) { 023 throw new UncheckedSQLException("Error extracting meta data", e); 024 } 025 } 026 027 private static List<ColumnMetaData> create(final ResultSetMetaData metaData) 028 throws SQLException { 029 final int columnCount = metaData.getColumnCount(); 030 final List<ColumnMetaData> columns = new ArrayList<>(columnCount); 031 for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) { 032 columns.add(ColumnMetaData.create(metaData, columnIndex)); 033 } 034 return columns; 035 } 036 037 private static ColumnMetaData create(final ResultSetMetaData metaData, final int columnIndex) 038 throws SQLException { 039 final String label = metaData.getColumnLabel(columnIndex); 040 final String name = metaData.getColumnName(columnIndex); 041 final ColumnType columnType = ColumnType.create(metaData, columnIndex); 042 return new ColumnMetaData(columnIndex, name, label, columnType); 043 } 044}