锁定老帖子 主题:ResultSet 判断是否为空
精华帖 (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()); } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-08-18
没看明白,这个和下面的有什么区别:
while (rs.next()) { System.out.println(rs.getInt(1)); } |
|
返回顶楼 | |
发表时间:2011-08-18
在做查询的时候一般都会用到count总记录数,如果count为0可以直接取消查询操作
|
|
返回顶楼 | |
发表时间:2011-08-18
直接
while (rs.next()) { 。。。 } 就行了 .... |
|
返回顶楼 | |
发表时间:2011-08-18
OMG...
如果事务不支持 rs.previous() 怎么办? 你 rs.next() 如果为空则不进入循环不就结了吗? 弄得这么麻烦 |
|
返回顶楼 | |
发表时间: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())是一样的 |
|
返回顶楼 | |
发表时间:2011-08-19
API 看不懂吗?
|
|
返回顶楼 | |
发表时间:2011-08-19
LZ 有点掩耳盗铃了。。。
|
|
返回顶楼 | |
发表时间:2011-08-29
chunquedong 写道 没看明白,这个和下面的有什么区别:
while (rs.next()) { System.out.println(rs.getInt(1)); } 一样的 只是上面的要支持 rs.previous() |
|
返回顶楼 | |
发表时间:2011-08-29
akinlong 写道 在做查询的时候一般都会用到count总记录数,如果count为0可以直接取消查询操作
这样不是每次都查询两次 |
|
返回顶楼 | |