论坛首页 Java企业应用论坛

ResultSet 判断是否为空

浏览 14513 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (2)
作者 正文
   发表时间:2011-08-15  

很多时候我们都要判断ResultSet是否存在记录, 但是java里ResultSet 这个对象没有提供一个方法能判断 ,我们只能用next这个方法, next会滚动一条记录丢失第一条数据, 往往很多时候都需要第一条记录,所以我们要做相应的处理  我平常在开发中用到了以下两种形式 。

 

第一种方法  不及时更新ResultSet 结果集

//sql脚本
String sql="seelect * from tb_demo";
//改成可以双向滚动,但不及时更新,就是如果数据库里的数据修改过,
//并不修改ResultSet记录  必须要改成 TYPE_SCROLL_INSENSITIVE
PreparedStatement pstmt = conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE, 
ResultSet.CONCUR_READ_ONLY);
//执行查询
ResultSet rs = pstmt.executeQuery();
//判断是否存在记录
if (rs.next()) {
 //存在记录 rs就要向上移一条记录 因为rs.next会滚动一条记录了
 rs.previous();
 //在执行while 循环
while(rs.next()){
 system.out.println(rs.getInt(1));
}
}

 

推荐第二种方法  及时更新ResultSet 结果集

//sql脚本
String sql="seelect * from tb_demo";
PreparedStatement pstmt = conn.prepareStatement(sql);
//执行查询
ResultSet rs = pstmt.executeQuery();
//判断是否存在记录
if (rs.next()) {
     //有的话 先获取第一条记录
     do{
          System.out.println(rs.getInt(1));
 } while(rs.next());
}
 
   发表时间:2011-08-18  
没看明白,这个和下面的有什么区别:

while (rs.next())
{
  System.out.println(rs.getInt(1));
}
0 请登录后投票
   发表时间:2011-08-18  
在做查询的时候一般都会用到count总记录数,如果count为0可以直接取消查询操作
0 请登录后投票
   发表时间:2011-08-18  
直接
while (rs.next())
{
。。。
}
就行了 ....
0 请登录后投票
   发表时间:2011-08-18  
OMG...

如果事务不支持 rs.previous() 怎么办? 你 rs.next() 如果为空则不进入循环不就结了吗? 弄得这么麻烦
0 请登录后投票
   发表时间:2011-08-19   最后修改:2011-08-19
A ResultSet cursor is initially positioned before the first row; the first call to the method next makes the first row the current row; the second call makes the second row the current row, and so on.

ResultSet 的 cursor 初始化的时候是在第一条记录的前面。因此,无论如何你要取到第一套都要执行next,不存在你说的丢失的情况。

你的代码:
引用

if (rs.next()) { 
//
rs.previous();
while(rs.next()){
……

向后,向前,再向后 和直接 while(rs.next())是一样的
0 请登录后投票
   发表时间:2011-08-19  
API 看不懂吗?
0 请登录后投票
   发表时间:2011-08-19  
LZ 有点掩耳盗铃了。。。
0 请登录后投票
   发表时间:2011-08-29  
chunquedong 写道
没看明白,这个和下面的有什么区别:

while (rs.next())
{
  System.out.println(rs.getInt(1));
}


一样的  只是上面的要支持 rs.previous()
0 请登录后投票
   发表时间:2011-08-29  
akinlong 写道
在做查询的时候一般都会用到count总记录数,如果count为0可以直接取消查询操作


这样不是每次都查询两次
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics