没有结果时,executeQuery(String sql) 返回啥? [复制]

Posted

技术标签:

【中文标题】没有结果时,executeQuery(String sql) 返回啥? [复制]【英文标题】: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 对象。 【参考方案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;

【讨论】:

以上是关于没有结果时,executeQuery(String sql) 返回啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

type 语句中的方法 executeQuery(string) 不适用于 arguments(),我哪里出错了?使用 Eclipse

ADO.net执行多个查询(ExecuteQuery和ExecuteScalar)并在Web表单控件中显示结果

LINQ ExecuteQuery - 错误

SQL 错误:executeQuery 方法必须返回结果集

可以将 executeQuery(String sql) 函数的返回值类型转换为字符串数组吗?

Hive 查询 executeQuery() 在 java JDBC 代码中挂起