0

我有以下代码

if (rs != null)
{
  out.println("result set has got something");
  while (rs.next())
  { 
    //I am processing result set now
  }
}
else
{
  out.println("result set is empty");
}

即使 rs 为空,它也会打印"resultset has got something"。为什么会这样,我如何检查空结果集?

4

4 回答 4

5

您可以通过以下方式进行检查:

if(rs != null && rs.next()) {
    out.println("result set has got something");
    do {
        // do what you have to do
    } while (rs.next());
} else {
    out.println("result set is empty");
}
于 2012-05-09T09:31:48.630 回答
1

作为查询结果返回的 JDBC ResultSet 对象永远不会为空,请阅读 javadoc。所以你检查的方式是错误的。您可以改用ResultSet.next()方法。

于 2012-05-09T09:36:26.493 回答
0

一个ResultSet对象维护一个指向其当前数据行的游标 - 除非您的调用方法不能保证传递的结果集是通过特定查询执行语句生成的,然后使用处理空指针;

if(rs !=null && rs.next())
{
 ..
}

是必不可少的 - 但如果你正在处理

ResultSet rs = stmt.executeQuery(..);

那么就不需要进行Null点检查了,直接问ResultSet是否有数据即可;

String name=null;
while (rs.next()) 
{
 name =rs.getString(1);
}

然后处理这样的值;

if(name !=null && name.length()>0)
{
 ..        
}
于 2012-05-09T09:43:47.057 回答
0

对于记录集,最好使用 Java 提供的三元运算符。例如:

假设您要将名称设置为用户对象 pojo。

myUser.setName(null != recordSet.getString("name") ? recordSet.getString("name") : "Guest");

希望这可以帮助。

于 2015-12-18T09:01:31.340 回答