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

Iva*_*van 29 java jdbc resultset

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

Buh*_*ndi 35

您可以使用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!");
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @Ivan,请注意,如果使用别名(SELECT col AS foo),则会有一些复杂性.http://bugs.mysql.com/bug.php?id=43684 (2认同)
  • 如果有兴趣获取SQL查询的`AS`子句定义的名称,可以使用@JoshuaMartell,`ResultSetMetaData.getColumnLabel` (2认同)

Bor*_*vić 15

尝试使用方法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;
}
Run Code Online (Sandbox Code Playgroud)

  • 它可以与Java的常规执行进行比较.请记住,通常瓶颈不是Java代码,而是另一方面运行的变量 - 数据库.最有可能执行查询和数据传输比异常处理慢几个数量级. (3认同)