为啥没有结果时 ResultSet 不为空? [复制]
Posted
技术标签:
【中文标题】为啥没有结果时 ResultSet 不为空? [复制]【英文标题】:Why isn't the ResultSet null when there are no results? [duplicate]为什么没有结果时 ResultSet 不为空? [复制] 【发布时间】:2017-06-20 09:15:29 【问题描述】:为什么我的 else 不起作用?没有输出。我的 if 工作得很好。帮助表示赞赏!
String s2 = "SELECT CCA FROM generatedchoices WHERE category='" + category + "' AND intensiveness='"+ intensiveness + "'";
rs2 = st.executeQuery(s2);
if(rs2!=null)
while (rs2.next())
ccalist.add(rs2.getString("CCA"));
else
System.out.println("No combination!");
//JOptionPane.showMessageDialog(null, "No combination found!");
【问题讨论】:
如果if
块“运行良好”,为什么还要输入else
块?
如果没有获取记录,rs2 不会为空。 rs2.next()
将是错误的
如果您的if
块工作正常,为什么else
块可以工作?
【参考方案1】:
你在做
rs2 = st.executeQuery(s2);
所以rs2
永远不会为空。
也许你想要什么 ti if (rs2.isBeforeFirst()) ... else ...
见http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#isBeforeFirst()
【讨论】:
【参考方案2】:来自the docs for Statement#executeQuery
(强调我的):
返回:一个 ResultSet 对象,其中包含给定查询产生的数据; 从不为空
如果查询没有返回任何行,您将不会得到null
。你会得到一个空的ResultSet
。一个简单的检查方法是使用isBeforeFirst()
作为给定的in this answer,而不是检查null
:
if (resultSet.isBeforeFirst() )
// loop over results
else
// no results returned
如果您对该解决方案不满意,或者由于某种原因它会给您带来问题,另一种直接的方法是简单地检查您是否处理了结果,例如:
rs2 = st.executeQuery(s2);
boolean hadResults = false;
while (rs2.next())
ccalist.add(rs2.getString("CCA"));
hadResults = true;
if (!hadResults)
System.out.println("No combination!");
//JOptionPane.showMessageDialog(null, "No combination found!");
或者你可以想出的任何其他方法来剥那只特定的猫。
【讨论】:
点赞测试length
of ccalist
@ScaryWombat 这也行得通,尽管在此代码 sn-p 之前,您必须小心不要对 ccalist
的内容做出任何假设。在给出 [缺少] 信息的情况下,您需要比较循环前后的大小。这也意味着ccalist
实际上是某种列表的假设,并且add
总是增加大小,而不是一个容易混淆的变量,例如某种类型的集合。但如果您对ccalist
了解更多,您可以稍微缩小选择范围。以上是关于为啥没有结果时 ResultSet 不为空? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
在MyEclipse中执行模糊查询,ResultSet结果集不为空但rs.next()为false,求解。
jdbc如何判断记录集是否为空?用啥方法?ResultSet本身是否根本就没有这样的方法?