发帖来源:
http://topic.csdn.net/t/20020427/09/680409.html
关于rs.next()的理解的一些我也有过的误区。
rs.next()表示的是什么,是不是检验rs的下一个是否为空,如果不为空,rs的下一个的值赋予rs?
帖子里这么问了一句。
首先是ResultSet rs的理解有误。“rs的下一个”和“rs的下一个的值赋予rs”。ResultSet rs.rs是一个Resultset是一个接口。我这么理解的。就把rs理解成一个table,执行完sql语句后得到的结果就全放到这个table里了。rs.next()不是rs的next是什么。rs有一个游标的域,游标初始时指向rs的table的前一行,所以当table不为空时候。while(rs.next()){}是从第一行进行对其操作的。而如果记录集为空的话,也不可以用if(rs==null)来进行判断,因为你都已经创建出来ResultSet了,怎么会为null呢,也解释了 http://www.cnblogs.com/xnxqs/archive/2005/05/23/160863.html .的一些说法。next()是rs实例的一个方法,它返回的是该记录集的下一行。所以判断是否 sql语句查询的记录集为空时候,应该用if(rs.next())来进行判断。rs.next()进入表的第一行,next()函数返回值说明如下,
Returns:true if the new current row is valid; false if there are no more rows
而你的记录集表为空,所以返回false,就对了。我的疑问是,resultSet里并没有表啊,这个搜出来的符合你sql语句的记录集是存在哪里的??
http://topic.csdn.net/t/20020427/09/680409.html
关于rs.next()的理解的一些我也有过的误区。
rs.next()表示的是什么,是不是检验rs的下一个是否为空,如果不为空,rs的下一个的值赋予rs?
帖子里这么问了一句。
首先是ResultSet rs的理解有误。“rs的下一个”和“rs的下一个的值赋予rs”。ResultSet rs.rs是一个Resultset是一个接口。我这么理解的。就把rs理解成一个table,执行完sql语句后得到的结果就全放到这个table里了。rs.next()不是rs的next是什么。rs有一个游标的域,游标初始时指向rs的table的前一行,所以当table不为空时候。while(rs.next()){}是从第一行进行对其操作的。而如果记录集为空的话,也不可以用if(rs==null)来进行判断,因为你都已经创建出来ResultSet了,怎么会为null呢,也解释了 http://www.cnblogs.com/xnxqs/archive/2005/05/23/160863.html .的一些说法。next()是rs实例的一个方法,它返回的是该记录集的下一行。所以判断是否 sql语句查询的记录集为空时候,应该用if(rs.next())来进行判断。rs.next()进入表的第一行,next()函数返回值说明如下,
Returns:true if the new current row is valid; false if there are no more rows
而你的记录集表为空,所以返回false,就对了。我的疑问是,resultSet里并没有表啊,这个搜出来的符合你sql语句的记录集是存在哪里的??
如果,获得了结果集为string(varchar(20))可以通过否则pass
rs.next()
大概意思:
像指针一样 一行行读取数据 而rs.getString(1);意思是说:读取着一行中的第一列的参数!!你可以有TPYES获得结果集之前来判断结果集是否是你想要的属性 如果不是可以PASS!!这样可以带来很大好处!
通用性强!
你可以认为在executeQuery之后,rs是处于第0行,第一行才是数据的开始。所以while(rs.next())就可以了
它可以直接跳到N条记录读取。 如果你在while(rs.next){
con.close();
}
那你就会明白了。这里立马就报错了,报数据库refused。ResultSet并不是虚表。只是建立了一个数据库之间的游标,而且一直保持连接。在rs.next没有读完,连接是不能关闭的。也就是每条读取都跟数据库交换。只是建立了一个游标查询而已。不信你搞个数据库,试试。
ResultSet它就是用来表示查询结果的类~它是接口但要被具体的类实现的嘛
它提供一些方法如next()getxxxx()帮你得到想要的信息。至于这些方法是怎么实现的,查询结果的数据结构怎么设计储存的, 估计查询下文档应该能知道吧·~至于你想像中的虚表,程序里是不可能具体表示的,估计是把查询结果每一行记录放在一个字符串或类
然后所有的记录也就是所有字符串或类放在一个集合里(list或set)。然后应该在ResultSet里定义一些辅助属性
如当前指向的记录的位置,总的记录数等等,通过这些属性就可以取出集合里具体位置的数据了。完全是个人没有依据非常土的看法~~不要在意~呵呵~
迷迷糊糊的,还是有点好奇,它建立游标后,我要查的记录集是一个集合,你游标只指向一条记录,你意思是说,我不是先把所有的符合的结果都抽出来成一张表,而是在查询的那张表上指了一个指针么?然后我next()就去查下一个符合的么?
周一结贴。
ResultSet 从内存里面读取东西,因为起点不是指向第一行数据,所以要用next()方法,让游标向前移动到第一行那,如果不
移动,直接用ResultSet 对象取值,就会发生异常。要说的明白比较难,想了解,为什么一定要用next()方法呢,最好,去看ResultSet 这个类的源代码/
2、既然rs不会为null,所以在rs = stmt.exeQuery(sql)后,使用while(rs.next())或者if(rs.next())时就不用判断rs != null;
3、rs.next时,游标最先是指向第一条记录前的位置,所以第一次rs.next后,游标指向的正好是第一条记录(如果有的话)
4、要判断rs的结果是否为空,只要使用一次rs.next方法就行了,如果它返回为false,则证明rs的结果为null
转自http://ml365.iteye.com/blog/838949