Подтвердить что ты не робот

Как определить, существует ли имя столбца в ResultSet?

Как ResultSet содержит данные, возвращаемые из динамического SQL, если есть какой-либо метод для определения того, содержит ли ResultSet определенное имя столбца? Например, если я запустил rs.getString("Column_ABC");, но Column_ABC действительно не существует, он выкинет исключение. Как я могу проверить, может ли ResultSet получить данные из столбца с именем "Column_ABC"?

4b9b3361

Ответ 1

Используйте класс ResultSetMetaData.

public static boolean hasColumn(ResultSet rs, String columnName) throws SQLException {
    ResultSetMetaData rsmd = rs.getMetaData();
    int columns = rsmd.getColumnCount();
    for (int x = 1; x <= columns; x++) {
        if (columnName.equals(rsmd.getColumnName(x))) {
            return true;
        }
    }
    return false;
}

Я не понимаю, почему эта функция когда-либо понадобится. Выполняемый запрос или хранимая процедура должны иметь известные результаты. Должны быть известны столбцы запроса. Необходимость такой функции может быть признаком того, что где-то есть проблема с дизайном.

Ответ 2

Не уверен, что это более или менее эффективно, чем ответ Эрика, но это проще.

String str;

try {
    str = rs.getString(columnName);
} catch (java.sql.SQLException e) {
    str = null;
}

Ответ 3

/**
 * returns default value if column is not present in resultset
 * 
 * @param rs
 * @param columnLabel
 * @param defaultValue
 * @return
 */
@SuppressWarnings("unchecked")
private static <T> T getValueFromResultSet(final ResultSet rs,
        String columnLabel, T defaultValue) {
    try {
        return (T) rs.getObject(columnLabel);
    } catch (SQLException e) {
        return defaultValue;
    }
}

В версии java >= 7 у вас есть возможность передать тип класса в метод ResultSet # getObject

Ответ 4

если не rs.getString( "Column_ABC" ) = ничего, то 'ваш код здесь