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

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

【问题讨论】:

标签: java jdbc resultset


【解决方案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对象

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-23
      • 2014-01-08
      • 1970-01-01
      • 1970-01-01
      • 2011-06-26
      • 1970-01-01
      • 2015-09-03
      相关资源
      最近更新 更多