Как ResultSet содержит данные, возвращаемые из динамического SQL, если есть какой-либо метод для определения того, содержит ли ResultSet определенное имя столбца? Например, если я запустил rs.getString("Column_ABC");
, но Column_ABC действительно не существует, он выкинет исключение. Как я могу проверить, может ли ResultSet получить данные из столбца с именем "Column_ABC"?
Как определить, существует ли имя столбца в ResultSet?
Ответ 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" ) = ничего, то 'ваш код здесь