如何确定结果集中是否存在列名?

2022-08-31 12:00:23

由于 包含从动态 SQL 返回的数据,是否有任何方法可以确定 是否包含特定的列名?ResultSetResultSet

例如,如果我运行但并不真正存在,它将抛出异常。rs.getString("Column_ABC")"Column_ABC"

如何测试 是否可以从名为 ?ResultSet"Column_ABC"


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

推荐