如何检查 ResultSet 是不是包含特定命名的字段?

Posted

技术标签:

【中文标题】如何检查 ResultSet 是不是包含特定命名的字段?【英文标题】:How to check that a ResultSet contains a specifically named field?如何检查 ResultSet 是否包含特定命名的字段? 【发布时间】:2011-04-25 22:46:21 【问题描述】:

拥有rs,java.sql.ResultSet 的一个实例,如何检查它是否包含名为“theColumn”的列?

【问题讨论】:

How can I determine if the column name exist in the ResultSet ? 的可能重复项 How do I check to see if a column name exists in a CachedRowSet?的可能重复 【参考方案1】:

您可以使用ResultSetMetaData 遍历ResultSet 列并查看列名是否与您指定的列名匹配。

例子:

ResultSetMetaData rsMetaData = rs.getMetaData();
int numberOfColumns = rsMetaData.getColumnCount();

// get the column names; column indexes start from 1
for (int i = 1; i < numberOfColumns + 1; i++) 
    String columnName = rsMetaData.getColumnName(i);
    // Get the name of the column's table name
    if ("theColumn".equals(columnName)) 
        System.out.println("Bingo!");
    

【讨论】:

@Ivan,请注意,如果您使用别名 (SELECT col AS foo) 会有些复杂。 bugs.mysql.com/bug.php?id=43684 @JoshuaMartell, ResultSetMetaData.getColumnLabel 如果有兴趣获取 SQL 查询的 AS 子句定义的名称,可以使用【参考方案2】:

尝试使用ResultSet#findColumn(String)的方法

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;

【讨论】:

它可以比作Java的常规执行。请记住,通常瓶颈不是 Java 代码,而是在另一端运行的薄弱点——数据库。查询和数据传输的执行很可能比异常处理慢几个数量级。 链接给出 404。【参考方案3】:

你可以这样做:

rs.findColumn("theColum")

并检查 SQLException

【讨论】:

是的,我认为最简单的方法是尝试以一种或另一种方式检索列并捕获异常。 这通常是一个糟糕的解决方案,因为您故意为常见情况抛出异常,抛出异常是针对罕见情况并且在资源方面很昂贵【参考方案4】:

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

【讨论】:

【参考方案5】:

使用ResultSet对象通过rs.getMetaData()提供的ResultSetMetaData对象

【讨论】:

以上是关于如何检查 ResultSet 是不是包含特定命名的字段?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring JDBC ResultSetExtractor 中检查 ResultSet 是不是为空? [复制]

如何检查 ResultSet 中是不是存在字段?

如何检查表是不是包含特定列?

如何检查 int var 是不是包含特定数字

如何检查元素是不是包含特定的类属性

如何检查数组列表是不是包含特定的字符串值? [复制]