如何检查 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 是不是为空? [复制]