如何确定列名是否存在于ResultSet中?

由于ResultSet包含从dynamicSQL返回的数据,如果有任何方法来确定ResultSet是否包含特定的列名称? 例如,如果我运行rs.getString("Column_ABC"); 但Column_ABC并不存在,它会抛出exception。 如何testingResultSet是否可以从名为“Column_ABC”的列中获取数据?

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

我不明白的是为什么这个function会被需要。 正在执行的查询或存储过程应该有已知的结果。 查询的列应该是已知的。 需要这样的function可能是某处出现devise问题的标志。

不知道这是否比埃里克的答案更有效率,但更容易。

 String str; try { str = rs.getString(columnName); } catch (java.sql.SQLException e) { str = null; } 
 /** * 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方法中传递Classtypes的选项

如果不是rs.getString(“Column_ABC”)=没有,那么在这里你的代码