All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.kiwiproject.beta.jdbc.KiwiJdbcMetaData Maven / Gradle / Ivy

package org.kiwiproject.beta.jdbc;

import com.google.common.annotations.Beta;
import lombok.experimental.UtilityClass;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.stream.IntStream;

/**
 * Utilities relating to JDBC metadata.
 */
@Beta
@UtilityClass
public class KiwiJdbcMetaData {

    /**
     * Check whether a {@link ResultSet} contains a column label, ignoring case since some database systems (e.g., H2)
     * return column metadata in all capitals, e.g. {@code FIRST_NAME} instead of {@code first_name}.
     *
     * @param rs          the ResultSet to check
     * @param columnLabel the column label to look for
     * @return true if the ResultSet contains the given column label
     * @throws RuntimeSQLException if there was any error getting column metadata
     */
    public static boolean resultSetContainsColumnLabel(ResultSet rs, String columnLabel) {
        // NOTE: column numbers in JDBC result sets are 1-based, i.e., 1, 2, ..., N
        try {
            var metaData = rs.getMetaData();
            var columnCount = metaData.getColumnCount();
            var foundColNum = IntStream.rangeClosed(1, columnCount)
                    .filter(colNum -> metaDataColumnLabelEquals(metaData, colNum, columnLabel))
                    .findFirst()
                    .orElse(0);
            return foundColNum > 0;
        } catch (SQLException e) {
            throw new RuntimeSQLException(e);
        }
    }

    private static boolean metaDataColumnLabelEquals(ResultSetMetaData metaData, int colNum, String columnLabel) {
        try {
            return metaData.getColumnLabel(colNum).equalsIgnoreCase(columnLabel);
        } catch (SQLException e) {
            throw new RuntimeSQLException(e);  // this really should never happen, so wrap in a runtime exception
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy