怎样从ResultSet中得到结果集的总行数

03-08-02 KillerMan
见以前的同事用过一个方法,是jdbc2.0中提供的一个API行数。

那位大侠知道。

baichenhong
2003-08-03 00:05
ResultSet rs=conn.executeQuery("select * from tablename");

rs.last();

int totalrow=rs.getRow();

或者

ResultSet rs=conn.executeQuery("select count(*) from tablename");

rs.next();

int totalrow=rs.getInt(1);

第一种方法需要JDBC2.0,第二种方法就是通用的啦

KillerMan
2003-08-03 01:13
哦,是先把结果集游标移到最后,然后得到当前行号。

我只顾找类似域affectrows之类的api了。

谢了。

AreYouOK?
2003-08-03 15:27
有的驱动程序在last的时候真的会一个个的遍历下去

速度奇慢

remanwang
2003-08-04 17:13
还是用select count(*)比较好

sprsong
2003-08-04 17:32
对于最后要去每一列的合计,都用什么办法。

我用过每一列一个临时变量,累加,最后输出。

我也用过把“select '合计',sum(a),sum(b),……”作为最后一行的输出。

KillerMan
2003-08-04 17:41
使用count(*) 不是很easy的事情,除非你在写一个count语句再查询一次。

并且对于多表连接,且加上了对某几个字段distinct关键字,时count语句是没有办法简单从查询语句中推导出来的。

sprsong
2003-08-04 17:51
假如你以前的查询是

sql = "select * from users a,city b where a.city_id=b.city_id";

那么总数的查询就是:

sql2 = "select count(*) from ("+sql+")";

子查询而已,甚至可以写成自动生成的代码,。

KillerMan
2003-08-05 10:00
只针对一种具体的数据库很简单。

mysql不支持子查询啊。写一个通用类,采用这个方法就不行了。

sprsong
2003-08-05 12:37
那个是懒省事的办法。

其实任何负责的查询都可以分成select …… from …… where …… 三部分,就象任何语句都可以分出主谓宾,只要把select和from之间的字符换成count(*),那么就可以搞定。

但有一种情况除外:union和minus。但是mysql同样不支持union和minus,所有这也不是问题。

KillerMan
2003-08-05 12:55
distinct??

猜你喜欢