Как я могу определить, существует ли имя столбца в ResultSet? - PullRequest
56 голосов
/ 30 августа 2010

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

Ответы [ 4 ]

87 голосов
/ 30 августа 2010

Используйте класс 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;
}

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

7 голосов
/ 25 июня 2014

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

String str;

try {
    str = rs.getString(columnName);
} catch (java.sql.SQLException e) {
    str = null;
}
0 голосов
/ 21 сентября 2016
/**
 * 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 метод

0 голосов
/ 30 августа 2010

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

...