如何判断ResultSet中是否存在列名?

问题描述 投票:0回答:7

由于

ResultSet
包含动态SQL返回的数据,是否有方法判断
ResultSet
是否包含特定列名?

例如,如果我运行

rs.getString("Column_ABC")
"Column_ABC"
并不真正存在,它会抛出异常。

如何测试

ResultSet
是否可以从名为
"Column_ABC"
的列获取数据?

java jdbc resultset
7个回答
146
投票

使用

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;
}

我不明白的是为什么需要这个功能。正在执行的查询或存储过程应该具有已知的结果。查询的列应该是已知的。需要这样的功能可能表明某处存在设计问题。


23
投票
private boolean isThere(ResultSet rs, String column){
    try{
        rs.findColumn(column);
        return true;
    } catch (SQLException sqlex){
        logger.debug("column doesn't exist {}", column);
    }

    return false;
}

7
投票

不确定这是否比埃里克的答案效率更高或更低,但它更容易。

String str;

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

0
投票
    if(Objects.nonNull(((ResultSetImpl) resultSet).getColumnDefinition()) && Objects.nonNull(((ResultSetImpl) resultSet).getColumnDefinition().getColumnLabelToIndex()) && Objects.nonNull(((ResultSetImpl) resultSet).getColumnDefinition().getColumnLabelToIndex().get(columnName))) {
        return true;
    }

-2
投票

resultSet.getColumnMetaData().contains(columnName)


-4
投票
/**
 * 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 方法中传递 Class 类型


-20
投票

如果不是 rs.getString("Column_ABC")= 则什么也没有 ' 你的代码在这里

© www.soinside.com 2019 - 2024. All rights reserved.