如何获取ResultSet的行数和列数
当我们执行数据库查询返回一个ResultSet的时候,很多情况下我们需要知道这个ResultSet的大小,即它的行数和列数。我们知道它的列数可以通过resultSet.getMetaData().getColumnCount()很容易地得到,然而,java API没有提供直接访问ResultSet行数的接口。
这个时候,有三个办法可以解决:
1.改用select count语句,然后直接从ResultSet里面获取结果:
try {
  Statement statement = connection.createStatement();
  ResultSet resultSet = statement.executeQuery("select count(*) as rowCount from tableName");
  resultSet.next();
  int rowCount = resultSet.getInt("rowCount");
} catch (Exception e) {
  // TODO: handle exception
  e.printStackTrace();
}
但是,我们执行数据库查询不光要知道结果的行数,往往接下来还要用到查询结果。如果用此方法,还需要再执行一次select语句,才能得到想要的结果集,这样,就多了一次数据库查询,大大降低了执行速度。
2.遍历Resultset,用一个变量记录行数。代码如下:
int count = 0;
try {
while(resultSet.next()){
count = count + 1;
}
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
这样获取的count值就是结果集的行数。然而,这种方法同第一种方法的问题一样,不能再使用结果集了。因为这时候指针已经移动到结果集的外面了,不再指向任何记录。
3.知道了第二种方法中问题的原因,我们就知道如何更好地解决这个问题了。第二种方法的问题在于返回的结果集中的指针不能自由移动,幸好java为我们提供了选择,可以让我们创建指针可以自由移动的结果集,所需要做的只有一件事,就是在创建Statement的时候,加上两个参数:
try {
  //Statement statement = connection.createStatement();
  Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
  ResultSet resultSet = statement.executeQuery("select * from " + tableName);
} catch (Exception e) {
  // TODO: handle exception
  e.printStackTrace();
}
这样获得的结果集,指针就可以在其中自由移动。然后,就可以用如下方法获取结果集的行数:
int rowCount = 0;
try {
resultSet.last();
rowCount = resultSet.getRow();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
其中resultSet.last()就是将指针移动到结果集的最后一条记录;然后用resultSet.getRow()获取指针当前所在的行号(从1开始)
如果接下来你还要使用结果集,别忘了将指针移到第一行:
既然结果集是可滚动的,当然可以用absolute()方法访问指定行号的记录:
boolean java.sql.ResultSet.absolute(int row) throws SQLException
其中row参数可正可负,具体含义查一下ResultSet的absolute()方法就知道了。
如何获取ResultSet的行数和列数的更多相关文章
- StringGrid  实例2:1、获取 StringGrid 的行数、列数; 2、给单元赋值.
		
实例2: 本例功能: 1.获取 StringGrid 的行数.列数; 2.给单元赋值. 运行效果图:
 - 【2017-06-29】在登录页面自动返回上次请求页面、Js获取table中的行数与列数
		
一.在登录页面自动返回上次请求页面 Request.UrlReferrer比如 if (Request.UrlReferrer != null) { //如果能获取来路地址 Response.Redi ...
 - 用VBA计算WPS 表格ET EXCEL中的行数和列数的多重方法
		
用VBA计算WPS 表格ET EXCEL中的行数和列数 每种方法中上面的是Excel的行数,下面的是Excel的列数. 方法1: ActiveSheet.UsedRange.Rows.Count Ac ...
 - VBA取得EXCEL表格中的行数和列数
		
VBA取得EXCEL表格中的行数和列数 初学EXCEL宏的童鞋,总是很想知道表格中含有数据的行数和列数,尤其是行数和列数不确定的情况下.这样可以避免很多的错误,并且可以提高效率.但每次用到的时候到网上 ...
 - 网格布局(GridLayout) 行数与列数
		
1.如果网格布局对象未指定具体的“行数”和“列数”,那么它将拥有1行和动态的列数. import java.awt.Button; import java.awt.Frame; import java ...
 - Office EXCEL VBA如何取得EXCEL中的行数和列数
		
VBA取得EXCEL表格中的行数和列数 请注意不要使用Columus等关键字作为变量,例如"Columus = ActiveSheet.UsedRange.Columns.Count&quo ...
 - python如何输出矩阵的行数与列数?
		
Python如何输出矩阵的行数与列数? 对于pyhton里面所导入或者定义的矩阵或者表格数据,想要获得矩阵的行数和列数有以下方法: 1.利用shape函数输出矩阵的行和列 x.shape函数可以输出一 ...
 - Resultset获取行数和列数
		
在Java中,获得ResultSet的总行数的方法有以下几种. 第一种:利用ResultSet的getRow方法来获得ResultSet的总行数 Statement stmt = con.create ...
 - MFC LIST 获取行数和列数
		
DWORD dwStyle = dataListControl.GetExtendedStyle(); dwStyle |= LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与 ...
 
随机推荐
- 【bzoj1708】[USACO2007 Oct]Money奶牛的硬币
			
题目描述 在创立了她们自己的政权之后,奶牛们决定推广新的货币系统.在强烈的叛逆心理的驱使下,她们准备使用奇怪的面值.在传统的货币系统中,硬币的面值通常是1,5,10,20或25,50,以及100单位的 ...
 - javascript (2)
			
1.javascript作为一种脚本语言可以放在html页面中任何位置,但是浏览器解释html时是按先后顺序的,所以前面的script就先被执行.比如进行页面显示初始化的js必须放在head里面,因为 ...
 - 让用VS2013编写的程序在XP中顺利运行
			
vs2013编译好的exe文件拖到虚拟机xp中无法运行,提示错误,从网上搜索.找答案. 参考:http://blog.csdn.net/asanscape/article/details/387526 ...
 - 打不死的redis集群
			
导读 最近遇到部分系统因为redis服务挂掉,导致部分服务不可用.所以希望搭建一个redis集群镜像,把原先散落各处的redis服务器统一管理起来,并且保障高可用和故障自动迁移. 最近遇到部分系统因为 ...
 - shell脚本: 备份mysql远程数据库并清除一个月之前的数据
			
hxingxing-backup.sh: date="$(date +"%Y-%m-%d")"mysqldump -u root -h localhost -p ...
 - Linux下的压缩和解压缩命令——gzip/gunzip
			
gzip命令 gzip命令用来压缩文件.gzip是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多处".gz"扩展名. gzip是在Linux系统中经常使用的一个对文件进行压 ...
 - dell md3200i mdss (企业管理) 安装的那点事儿(2)
			
yum install iscsi-initiator-utils.x86_64yum install iscsi-initiator-utils-devel.x86_64yum install de ...
 - 《转载》myeclipse 上安装 Maven3
			
本文转载自http://www.cnblogs.com/fancyzero/archive/2012/06/09/maven3.html 环境准备: JDK 1.6 Maven 3.0.4 myecl ...
 - CorelDRAW x6 X8安装失败解决方法
			
CorelDRAW x6 X8自定义安装时,到最后经常会出现以下问题: 解决方法如下: 在自定义安装时,出现以下这个界面时,点击红色箭头的地方 将下图红色箭头指向的选项,点击取消,不要选上,即可解决安 ...
 - 【原创】node+express+socket搭建一个实时推送应用
			
技术背景 Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新. 应用场景: 监控系统:后台硬件热插拔.LED.温度.电压发生变化 即 ...