当没有结果时,为什么ResultSet不为null?

时间:2017-02-03 04:30:23

标签: java sql

为什么我的其他{}不起作用?没有输出。我的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!");
        }

2 个答案:

答案 0 :(得分:1)

你在做什么

rs2 = st.executeQuery(s2);

所以rs2永远不会为空。

也许你想要什么ti if (rs2.isBeforeFirst()) {...} else {...}

请参阅http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#isBeforeFirst()

答案 1 :(得分:0)

来自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!");
}

或任何其他各种方式,你可以想出去皮肤特定的猫。