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

使用statement为selecttop3*fromtable,得到的结果是结果集rs中有确实包括了数据库表中的前3条,但是rs的行数却是数据库中整个表的行数,并且访问... 使用statement为select top 3 * from table,得到的结果是结果集rs中有确实包括了数据库表中的前3条,但是rs的行数却是数据库中整个表的行数,并且访问后面的结果时会得到异常:无效的游标状态,比如说在第3条之后使用rs.next()方法就会抛出这种异常。可是通过rs.last()和rs.getRow()却得到rs中有整张表的行数。
我想请教一下问题的原因,并希望得到的结果集中只有3条,请高人指点啊,谢谢了
展开
 我来答
shy2850
推荐于2016-09-01 · TA获得超过6774个赞
知道大有可为答主
回答量:2505
采纳率:55%
帮助的人:1573万
展开全部
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){
//循环内容
}
earn8828
2011-04-03 · TA获得超过830个赞
知道小有建树答主
回答量:884
采纳率:0%
帮助的人:595万
展开全部
select top 3 这个需要你的数据库支持的才可以,不同的数据库都还是有些分别的,不是所有都可以共用的...
追问
我用的是access2007,有什么解决思路吗?不过确实是得到了前3个数据啊。只是不知道为什么行数那么多。rs后面的数据可能都没内容,但是行数是存在的啊。用rs.last()就不报错,而且可以得到rs.getRow()。但是用rs.next()到第4个就出错了,只能用到第3个。
追答
帮你用access测试了。。。
select top 3 * from table
我的就只是显示前3数据而已,不懂你的到底什么问题。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友6f54f17
2011-04-03 · 超过34用户采纳过TA的回答
知道答主
回答量:91
采纳率:0%
帮助的人:89万
展开全部
不要添加*,改为select top 3 from table。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wangzihaoip
2011-04-03 · TA获得超过100个赞
知道答主
回答量:66
采纳率:0%
帮助的人:33.5万
展开全部
select top 3 (*) from table
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
亿彦任Y
2011-04-03 · 超过16用户采纳过TA的回答
知道答主
回答量:44
采纳率:100%
帮助的人:38.5万
展开全部
贴代码
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式