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

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

【问题讨论】:

    标签: java jdbc 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 循环要快得多(就像其他人在这里已经建议的那样)
        • 同意...我投票赞成接受的答案,它更直接地回答了这个问题。
        • 多尔夫 - 不错!!!!!
        猜你喜欢
        • 2014-08-15
        • 2016-09-23
        • 2011-02-25
        • 2015-12-22
        • 1970-01-01
        • 2010-12-16
        • 2021-03-23
        • 2011-07-02
        • 2018-07-03
        相关资源
        最近更新 更多