如何在 Java 中查找 ResultSet 是不是为空? [复制]

Posted

技术标签:

【中文标题】如何在 Java 中查找 ResultSet 是不是为空? [复制]【英文标题】:How to find whether a ResultSet is empty or not in Java? [duplicate]如何在 Java 中查找 ResultSet 是否为空? [复制] 【发布时间】:2011-01-20 20:42:39 【问题描述】:

查询数据库得到的ResultSet怎么才能发现是空的呢?

【问题讨论】:

【参考方案1】:

在执行语句之后,您可以立即使用 if 语句。例如

ResultSet rs = statement.execute();
if (!rs.next())
//ResultSet is empty

【讨论】:

但是,如果结果集不为空,您现在将移动光标,有效地跳过第一行。 @Paul 我相信你应该更新你的答案,如果它不为空,即else rs.beforeFirst(); 【参考方案2】:

这绝对是一个很好的解决方案,

ResultSet rs = stmt.execute("SQL QUERY");
// With the above statement you will not have a null ResultSet 'rs'.
// In case, if any exception occurs then next line of code won't execute.
// So, no problem if I won't check rs as null.

if (rs.next()) 
    do 
      // Logic to retrieve the data from the resultset.
      // eg: rs.getString("abc");
     while(rs.next());
 else 
    // No data

【讨论】:

【参考方案3】:

使用rs.next()

while (rs.next())

    ...

如果结果集为空,则循环内的代码不会执行。

【讨论】:

【参考方案4】:

如果你使用 rs.next() 你会移动光标,而不是你应该移动 first() 为什么不直接使用 first() 检查?

    public void fetchData(ResultSet res, JTable table) throws SQLException     
    ResultSetMetaData metaData = res.getMetaData();
    int fieldsCount = metaData.getColumnCount();
    for (int i = 1; i <= fieldsCount; i++)
        ((DefaultTableModel) table.getModel()).addColumn(metaData.getColumnLabel(i));
    if (!res.first())
        JOptionPane.showMessageDialog(rootPane, "no data!");
    else
        do 
            Vector<Object> v = new Vector<Object>();
            for (int i = 1; i <= fieldsCount; i++)              
                v.addElement(res.getObject(i));         
            ((DefaultTableModel) table.getModel()).addRow(v);
         while (res.next());
        res.close();

【讨论】:

我同意。我在下面添加了我的代码(无法在注释中包含代码)。【参考方案5】: if (rs == null || !rs.first()) //空的 别的 //不是空的

注意,这个方法调用后,如果结果集不为空,就是在开头。

【讨论】:

我认为这样更安全。 ResultSet 永远不会为空。【参考方案6】:

计算 java.sql.ResultSet 的大小:

int size = 0;
if (rs != null) 
    rs.beforeFirst();
    rs.last();
    size = rs.getRow();

(Source)

【讨论】:

据我所知,这是一个坏主意...首先,您需要确保结果可以向后移动,其次,这样做会影响性能。使用仅向前的结果集并使用 while 循环要快得多(就像其他人在这里已经建议的那样) 同意...我投票赞成接受的答案,它更直接地回答了这个问题。 多尔夫 - 不错!!!!!

以上是关于如何在 Java 中查找 ResultSet 是不是为空? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

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

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

查找 ResultSet 列数? [复制]

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

java:ResultSet 迭代与 List 迭代:是不是存在性能差异

如何在 Java 中使用 ResultSet 获取行数?