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 不成功为false while(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结果集中是否存在下一条记录。
答: 判断游标的下一个内容是否存在