rs.next 问题

rs.next 问题,第1张

楼上所得有道理。

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)

}

首先你要知道ResultSet是一个结果集,即ResultSet存有一个表(通过执行查询数据库的语句生成),该表的当前行可以访问(当前行的初始位置是null),可以使用rs.next()方法移动到下一行(即表的第一行),如果新的当前行有效(即有值)就返回true,然后就可以使用get方法获取该行各列的值了,如果不存在下一行,则返回 false;因为这个方法会抛出一个SQLException,故要捕捉(try-catch)。。。。。打完 收工!


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9632481.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存