使用java,用resultset获取数据库中的结果

使用statement为select top 3 * from table,得到的结果是结果集rs中有确实包括了数据库表中的前3条,但是rs的行数却是数据库中整个表的行数,并且访问后面的结果时会得到异常:无效的游标状态,比如说在第3条之后使用rs.next()方法就会抛出这种异常。可是通过rs.last()和rs.getRow()却得到rs中有整张表的行数。
我想请教一下问题的原因,并希望得到的结果集中只有3条,请高人指点啊,谢谢了

ResultSet 是一个迭代模式的动态连接容器。
迭代模式的容器遍历的时候通常是这样的

while(rs.next()){
//循环内容
}

rs.next()返回值是一个boolean,表示在迭代过程中是否已经到结尾。
直接从statement.excuteQuery()获得的rs默认数据游标在起始数据的前一个位置,调用一遍rs.next()才能指向可能有数据的第一条数据。然后遍历继续,直到迭代集合中再无数据rs.next()返回false;

ps:rs.getRow()表达的意思是结果集在当前游标下共存在多少列,不是rs的size()

在循环体中您将可以获得当前整行数据的各个列的值以及其它信息。追问

已经调用了啊。
不过遍历到第3个之后就出错了。

追答

我不熟悉access数据库为什么还会有多余的迭代结果,但是可以用一种投机的方法试试
把while循环体的循环条件稍作更改:假设你返回的结果中每个结果有N个列项(N在这里应该是数据库中表的字段数目)。

while(rs.next() &&rs.getRow() == N){
//循环内容
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-03
select top 3 这个需要你的数据库支持的才可以,不同的数据库都还是有些分别的,不是所有都可以共用的...追问

我用的是access2007,有什么解决思路吗?不过确实是得到了前3个数据啊。只是不知道为什么行数那么多。rs后面的数据可能都没内容,但是行数是存在的啊。用rs.last()就不报错,而且可以得到rs.getRow()。但是用rs.next()到第4个就出错了,只能用到第3个。

追答

帮你用access测试了。。。
select top 3 * from table
我的就只是显示前3数据而已,不懂你的到底什么问题。。。

第2个回答  2011-04-03
不要添加*,改为select top 3 from table。
第3个回答  2011-04-03
select top 3 (*) from table
第4个回答  2011-04-03
贴代码

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网