【问题标题】:What does executeQuery(String sql) return when there are no results? [duplicate]没有结果时,executeQuery(String sql) 返回什么? [复制]
【发布时间】:2012-06-16 09:52:06
【问题描述】:

可能重复:
How to check if resultset has one row or more?

当 SQL 查询的结果为零行时,executeQuery(String sql) 将返回什么>?如果它返回一个ResultSet 对象,我们将如何检测SQ​​L Query 没有返回任何内容。

假设 SQL 查询是 SELECT 语句。

【问题讨论】:

  • 你试过了吗?应该返回或清空结果集
  • @JigarJoshi 我们如何检测返回的对象包含零行?
  • resultSet.next() 在没有更多数据的情况下返回false
  • 我找到的最好方法是在this SO answer的第二部分,他在不使用next()的情况下进行检查。顺便说一句,是的,它返回一个 ResultSet 对象。

标签: java sql jdbc


【解决方案1】:

你检查了ResultSet's next method 。最初 ResultSet 的光标指向第一行之前,第一次调用 next() 返回 false 意味着 ResultSet 中没有数据。请参阅 How do I get the size of a ResultSet? ,因为 Java 中的结果集没有直接的 size() 或 length() 方法。

【讨论】:

    【解决方案2】:

    resultSet 的 next() 方法将光标移动到下一行并返回一个布尔值,指示是否已读取数据。通常它与while循环一起使用

    while (myresultset.next()){ //some statement; } 在您的情况下,如果没有数据与查询匹配,则下一个方法的第一次调用将返回 false。

    【讨论】:

    • myresultset.first() 和 myresultset.next() 对第一次调用有同样的作用吗??
    • 是的,我猜,事件是否取决于实现。试一试。
    • 使用if(myresult.next()) 如果没有则返回false。
    【解决方案3】:

    它将返回一个结果集。使用

    boolean hasResult = rs.next();

    找出是否有结果行。

    【讨论】:

      【解决方案4】:

      零行的空结果集,即resultSet.next() 将返回 false。

      【讨论】:

      • Java 中的结果集没有 size() 或 length() 方法。
      【解决方案5】:

      如果返回的ResultSet 为空,则在此ResultSet 上第一次调用next() 方法的输出将返回false。

      基本上,通常的程序是其中的一些东西

      ResultSet rs = executeQuery("select ....");
      while(rs.next()) {
          //do something with the results
      }
      

      【讨论】:

        【解决方案6】:

        如果查询获取 0 条记录,它将返回空的 ResultSet。 最初光标指向结果集之前,当我们调用resultset.next() 时,光标移动到下一个resultset(迭代器模式),如果存在任何结果则返回true,否则它只返回false。在这种情况下,第一次调用next() 方法返回false

        【讨论】:

          【解决方案7】:

          您可以使用rs.getRow() 方法。

           if(rs.getRow() >= 1){
                //Has at least 1 result
              }
          

          Source:

          /**
              * Retrieves the current row number.  The first row is number 1, the
              * second number 2, and so on.
              * <p>
              * <strong>Note:</strong>Support for the <code>getRow</code> method
              * is optional for <code>ResultSet</code>s with a result
              * set type of <code>TYPE_FORWARD_ONLY</code>
              *
              * @return the current row number; <code>0</code> if there is no current row
              * @exception SQLException if a database access error occurs
              * or this method is called on a closed result set
              * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
              * this method
              * @since 1.2
           */
                int getRow() throws SQLException;
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-02-25
            • 2017-07-07
            • 1970-01-01
            • 1970-01-01
            • 2019-07-29
            • 2015-12-23
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多