rs.next 问题

来源:互联网 发布:2004nba新秀体测数据 编辑:程序博客网 时间:2024/04/29 05:31

 

if(rs.next()){   rs.first();}else     {        dos.writeUTF("false");      } while(rs.next())         {                         String result = rs.getString(3)+rs.getString(4)+rs.getString(5)+rs.getString(6);               dos.writeUTF(result);           } 我想取完整的数据,但是根据上面的编码,第一组数据都取不了麻烦高手指教!! 请详细给出方法代码,谢谢了
---------------------------------------------------------------------------------------------------------------------------------
楼上所得有道理。rs是结果集。查询出的记录是一个列表,初始时指针指向的是第一条记录之前的。每rs.next()一次指针都会向后移动一位,指向下一条记录。如果没有设置结果集的参数,那么正常情况下结果集都只能往下走,不能退回,也就是rs.next()后,是不能再指向已经指过的记录了,但是如果设置了conn.createStatement(rs.TYPE_SCROLL_INSENSITIVE,rs.CONCUR_READ_ONLY);那么就可以使用rs.first()、rs.last()等方法自己移动结果集指针,但是这种特性(可滚动结果集)是需要数据库支持的,好在现在大部分数据库都是支持的。======================翻译下你的代码:if(rs.next()){ //判断结果集rs是否有记录,并且将指针后移一位   rs.first();//如果有记录,再将指针指向第一条(需要设置结果集类型)}else     {        dos.writeUTF("false"); //否则输出false      } while(rs.next())   //如果rs有记录,那么迭代,但是因为上边已经使用rs.next将指针指向第一条记录了,那么此时初始时再next时实际上指向的是第二条记录。         {                         String result = rs.getString(3)+rs.getString(4)+rs.getString(5)+rs.getString(6);   //取记录结果值               dos.writeUTF(result);           } =========================问题已经说了,上边已经取了rs.next,指针指向的是第二条记录。所以可以这样试试:if(rs.hasNext())   //判断结果集是否有记录,此方法只是判断,指针不移动{    ..... //做需要做的事情   }else     {        dos.writeUTF("false");      } while(rs.next())         {                         String result = rs.getString(3)+rs.getString(4)+rs.getString(5)+rs.getString(6);               dos.writeUTF(result);           }
谢谢,方法应该没有问题,但是参数一改之后,客服端无法读取数据了。
-------------------------------------------------------------------------------------------------------------------------------

rs.next是布尔值,什么意思?

rs.next 进行 读取结果集 的下一条数据 成功为true 不成功为falsewhile(rs.next) //就是 将rs全部进行读取if(rs.next) //rs进行读取一次 判断是否有数据
rs.next()感悟

 if(rs.next())
    1.首先说ResultSet这个东西是一个接口,各个数据库驱动来实现他,真正我们用到的rs就已经是实例化的东西了,所以rs!=null这个肯定是正确的了,所以来判断是否rs有值就不能通过这个来判断。
    2.通过rs.next()这个方法判断才是王道,rs.next()表示结果集里rs游标从0条向下移动到第一条结果看看有没有结果如果有结果就显示true,否则显示false。
       道理是明白了,但是为什么还会出现问题呢,仔细从自身查找原因原来在我 System.out.println("rs.next===="+rs.next())已经在真正if(rs.next())之前叫游标向下移动,已 经移动到了第一条,知道真正执行if(rs.next())时候就真的找不到结果了。
 
    while (rs.next()) 请问这个是什么具体意思呢 
     
 
 
这个在 代码里起什么作用呢  
    答: 光标下移  不加while(rs.next())或者if(rs.next())或者rs.next()的话,直接去取rs.getString( "xx ");会出错  
    答: rs.next(),指向结果集里的下一条数据,while(rs.next())   :当rs里存在下一条记录
    答: rs.next()    (判断此字段的属性或者说列是不是为空)   可以打个比方查询数据库的时候   光标是在第0行的位置   因此没有任何属性或者说是值          当调用RS.NEXT()这个方法的时候   光标下移   第一次循环是在第一行   所有此时的RS对象   可以调用第一行的所有属性    例如   楼上说的rs.getString   (1)      则是第一个属性的值   也就是第一行   第一列的值   够清晰了吧
    答: 指针指向下一条数据:  但是注意   rs.next是不可逆的。  
    答: rs   游标下移,rs.next()返回一个布尔值,为true,则数据表中有记录,否则没有记录。next()可以遍历全部数据。
    答: rs.next()方法返回boolean类型,用于判断返回的ResultSet结果集中是否存在下一条记录。
    答: 判断游标的下一个内容是否存在