如何取得ResultSet的行数

如果你想的取得一个结果集的行数,怎么办?

在ResultSet对象里面,我们找不到取得结果行数的办法。

其实我们通常的解决方法无非有一下几种:

[1]

Connection con=....Statement stmt = con.createStatement();String sqlStr = "count(*) as total ";ResultSet rst = stmt.executeQuery(sqlStr);rst.next();int total =  rst.getInt("total");

缺点:如果想要遍历结果集,你不得不在执行一次查询,取得结果集。

[2]

String accQrySql = "select * from accounts";Connection con = DBUtils.getConnection();Statement stmt = con.createStatement (ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);ResultSet rst = stmt.executeQuery(accQrySql);

你可以通过下面的方法来取得结果集的记录数目

rst.last();int total = rst.getRow();

这时,你可以取得记录数目。

如果

while(rst.next()){........}

int total = rst.getRow();

你将得到的total是0

因为,getRow是在遍历结果集的时候的指针,也是在结果集内移动的指针,也就是说 ,指向了当前的记录索引号,所以,在进行结果集的遍历前和后都被重置成0。

所以,想取得记录的条数,可以把指针移到最后一条记录,然后取得当前记录的编号 就是记录的条数。

所以,必须用

rst.last();

之后才能用 rst.getRow()来取得,才能取到值。

注意:想要用这种方法来取得结果集的行数,必须用 可滚动结果集

Statement stmt = con.createStatement (ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

否则,你就不能执行

rst.last()

也就不能取得结果集的条数。

坚韧是成功的一大要素,只要在门上敲得够久够大声,终会把人唤醒的。

如何取得ResultSet的行数

相关文章:

你感兴趣的文章:

标签云: