由于ResultSet包含从动态SQL返回的数据,是否有任何方法可以确定ResultSet是否包含特定的列名?例如,如果我运行rs.getString("Column_ABC");但Column_ABC确实不存在,它将抛出异常.如何测试ResultSet是否可以从名为"Column_ABC"的列中获取数据?
我正在查询可能会发生变化的视图中的数据.在我做之前我需要知道列是否存在crs.get******().我发现我可以查询这样的元数据,以便在我从中请求数据之前查看列是否存在.
ResultSetMetaData meta = crs.getMetaData();
int numCol = meta.getColumnCount();
for (int i = 1; i < numCol+1; i++)
if(meta.getColumnName(i).equals("name"))
return true;
Run Code Online (Sandbox Code Playgroud)
有没有更简单的方法来检查列是否存在?
编辑:它必须是数据库不可知的.这就是我引用CachedRowSet而不是数据库的原因.
是否可以检查 ResultSet 以查看它是否包含当前行的列标签。我认为它由某种 Map 支持,因此提供 rs.contains("label") 方法不会那么昂贵,但我在 javadoc 中找不到。
我目前测试标签存在的方法是:
BigDecimal bid;
try {
bid = rs.getBigDecimal("bid");
}
catch(final SQLException e) {
bid = null;
}
Run Code Online (Sandbox Code Playgroud)
但这对我来说似乎不整洁,如果您想以这种方式测试多行,它将无法读取。