如何获取ResultSet的⾏数和列数
当我们执⾏数据库查询返回⼀个ResultSet的时候,很多情况下我们需要知道这个ResultSet的⼤⼩,即它的⾏数和列数。我们知道它的列数可以通过MetaData().getColumnCount()很容易地得到,然⽽,java API没有提供直接访问ResultSet⾏数的接⼝。
这个时候,有三个办法可以解决:
1.改⽤select count语句,然后直接从ResultSet⾥⾯获取结果:
try {
Statement statement = ateStatement();
ResultSet resultSet = uteQuery("select count(*) as rowCount from tableName");
<();
int rowCount = Int("rowCount");
} catch (Exception e) {
// TODO: handle exception
resultset 遍历e.printStackTrace();
}
但是,我们执⾏数据库查询不光要知道结果的⾏数,往往接下来还要⽤到查询结果。如果⽤此⽅法,还需要再执⾏⼀次select语句,才能得到想要的结果集,这样,就多了⼀次数据库查询,⼤⼤降低了执⾏速度。
2.遍历Resultset,⽤⼀个变量记录⾏数。代码如下:
int count = 0;
try {
()){
count = count + 1;
}
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
这样获取的count值就是结果集的⾏数。然⽽,这种⽅法同第⼀种⽅法的问题⼀样,不能再使⽤结果集了。因为这时候指针已经移动到结果集的外⾯了,不再指向任何记录。
3.知道了第⼆种⽅法中问题的原因,我们就知道如何更好地解决这个问题了。第⼆种⽅法的问题在于返回的结果集中的指针不能⾃由移动,幸好java为我们提供了选择,可以让我们创建指针可以⾃由移动的结果集,所需要做的只有⼀件事,就是在创建Statement的时候,加上两个参数:
try {
//Statement statement = ateStatement();
Statement statement = ateStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet resultSet = uteQuery("select * from " + tableName);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
这样获得的结果集,指针就可以在其中⾃由移动。然后,就可以⽤如下⽅法获取结果集的⾏数:
int rowCount = 0;
try {
resultSet.last();
rowCount = Row();
} catch (Exception e) {
/
/ TODO: handle exception
e.printStackTrace();
}
其中resultSet.last()就是将指针移动到结果集的最后⼀条记录;然后⽤Row()获取指针当前所在的⾏号(从1开始)
如果接下来你还要使⽤结果集,别忘了将指针移到第⼀⾏:
resultSet.first();
既然结果集是可滚动的,当然可以⽤absolute()⽅法访问指定⾏号的记录:
boolean java.sql.ResultSet.absolute(int row) throws SQLException
其中row参数可正可负,具体含义查⼀下ResultSet的absolute()⽅法就知道了。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。