没有结果时,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
对象,我们将如何检测SQL 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表单控件中显示结果