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

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

那位大侠知道。

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,第二种方法就是通用的啦

哦,是先把结果集游标移到最后,然后得到当前行号。
我只顾找类似域affectrows之类的api了。

谢了。

有的驱动程序在last的时候真的会一个个的遍历下去
速度奇慢

还是用select count(*)比较好

对于最后要去每一列的合计,都用什么办法。
我用过每一列一个临时变量,累加,最后输出。
我也用过把“select '合计',sum(a),sum(b),……”作为最后一行的输出。

使用count(*) 不是很easy的事情,除非你在写一个count语句再查询一次。

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

假如你以前的查询是
sql = "select * from users a,city b where a.city_id=b.city_id";
那么总数的查询就是:
sql2 = "select count(*) from ("+sql+")";
子查询而已,甚至可以写成自动生成的代码,。

只针对一种具体的数据库很简单。

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

那个是懒省事的办法。

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

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

distinct??