使用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条,请高人指点啊,谢谢了 展开
我想请教一下问题的原因,并希望得到的结果集中只有3条,请高人指点啊,谢谢了 展开
展开全部
ResultSet 是一个迭代模式的动态连接容器。
迭代模式的容器遍历的时候通常是这样的
while(rs.next()){
//循环内容
}
rs.next()返回值是一个boolean,表示在迭代过程中是否已经到结尾。
直接从statement.excuteQuery()获得的rs默认数据游标在起始数据的前一个位置,调用一遍rs.next()才能指向可能有数据的第一条数据。然后遍历继续,直到迭代集合中再无数据rs.next()返回false;
ps:rs.getRow()表达的意思是结果集在当前游标下共存在多少列,不是rs的size()
在循环体中您将可以获得当前整行数据的各个列的值以及其它信息。
迭代模式的容器遍历的时候通常是这样的
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){
//循环内容
}
展开全部
select top 3 这个需要你的数据库支持的才可以,不同的数据库都还是有些分别的,不是所有都可以共用的...
追问
我用的是access2007,有什么解决思路吗?不过确实是得到了前3个数据啊。只是不知道为什么行数那么多。rs后面的数据可能都没内容,但是行数是存在的啊。用rs.last()就不报错,而且可以得到rs.getRow()。但是用rs.next()到第4个就出错了,只能用到第3个。
追答
帮你用access测试了。。。
select top 3 * from table
我的就只是显示前3数据而已,不懂你的到底什么问题。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不要添加*,改为select top 3 from table。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select top 3 (*) from table
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
贴代码
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询