正文

ResultSet的结果如何判断是否为空2008-02-23 22:20:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/daweizhao/32897.html

分享到:

目前有三条语句需要执行并保存结果,每一条的结果不论有无都要记录下来,以便对其它相关数据进行处理。

之前最常用的这样的:

  ResultSet rs = SqlFunction.getResultSet(sql);
  while (rs.next()) {
   decisionProperty.add(rs.getString(1));
  }

但是需要注意的是,如果直接用rs.next即把结果集为空的直接跳过去了,如果rs.next的指针一开始所在位置是第一个的上一个,并且不允许为空,若为空,则直接跳过,直至下一个不为空的开始记录。

这样的话,我就不知道哪条语句的执行结果为空了

看了看ResultSet的方法,也没有找到相应的方法,上网查了下,所用的方法均不能实现,因为不论是是getRow或者是getFetchsize均要求在rs.next不为空下才有意义,这样就不能得到我想要结果了。

但是似乎还有一个方法是可取的,就是用select count(*),若为0则说明为空。但是这样的话,所花费的很大的,不仅要查询次数据库,而且相应的存储空间也要增加,十分不划算。

后来群上有人说了下,能不能用ResultSet的last或者first方法,他的解释是,若结果集不为空,则指向最后一个,若结果集为空,则返回false。嗯,看来可以试一下。我直接在rs.next外调用了下这个方法,但是却报错如下:Microsoft][SQLServer 2000 Driver for JDBC]Unsupported method: ResultSet.last。。GOOGLE了下,有人提出如下解决方法:

在createStatement时,不用其默认的方法,而是如下所示createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY),然后再调用last方法就OK了

但很奇怪的是,我必须先用rs.next把结果存下来后,再判断rs.last,rs.next的不为空的结果才能正确保存,若两个顺序掉换,则rs.next的结果集不能正确保存,均为空。因为没有debug,所以细节不是很清楚。正常都头大,这个放过去吧,:(

今天就算完成任务,但是之后所做的东西就会细节的多,:(

阅读(7147) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册