【问题标题】: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 块可以工作?

标签: java sql


【解决方案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 了解更多,您可以稍微缩小选择范围。
    猜你喜欢
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    • 2012-12-12
    相关资源
    最近更新 更多