首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java中使用ResultSet获取行数?

如何在Java中使用ResultSet获取行数?
EN

Stack Overflow用户
提问于 2011-10-25 16:16:11
回答 13查看 422.4K关注 0票数 82

我正在尝试创建一个简单的方法,它接收一个ResultSet作为参数,并返回一个包含ResultSet行数的int。这是做这件事的有效方式吗?

代码语言:javascript
复制
int size = 0;
    try {
        while(rs.next()){
            size++;
        }
    }
    catch(Exception ex) {
        System.out.println("------------------Tablerize.getRowCount-----------------");
        System.out.println("Cannot get resultSet row count: " + ex);
        System.out.println("--------------------------------------------------------");
    }

我试过这个:

代码语言:javascript
复制
int size = 0;
try {
    resultSet.last();
    size = resultSet.getRow();
    resultSet.beforeFirst();
}
catch(Exception ex) {
    return 0;
}
return size;

但是我收到一个错误,说是com.microsoft.sqlserver.jdbc.SQLServerException: The requested operation is not supported on forward only result sets.

提前感谢你的指点!

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2011-10-25 16:20:39

如果您有权访问产生此结果集的预准备语句,则可以使用

代码语言:javascript
复制
connection.prepareStatement(sql, 
  ResultSet.TYPE_SCROLL_INSENSITIVE, 
  ResultSet.CONCUR_READ_ONLY);

这将以一种可以倒带游标的方式准备语句。ResultSet Javadoc中也记录了这一点

但是,通常情况下,对于大型结果集,转发和倒带游标的效率可能非常低。SQL Server中的另一个选项是直接在SQL语句中计算总行数:

代码语言:javascript
复制
SELECT my_table.*, count(*) over () total_rows
FROM my_table
WHERE ...
票数 70
EN

Stack Overflow用户

发布于 2012-06-26 13:34:23

您的sql语句创建代码可能如下所示

代码语言:javascript
复制
statement = connection.createStatement();

为了解决"com.microsoft.sqlserver.jdbc.SQLServerException:问题,在只进结果集上不支持所请求的操作。

代码语言:javascript
复制
statement = connection.createStatement(
    ResultSet.TYPE_SCROLL_INSENSITIVE, 
    ResultSet.CONCUR_READ_ONLY);

完成上述更改后,您可以使用

代码语言:javascript
复制
int size = 0;
try {
    resultSet.last();
    size = resultSet.getRow();
    resultSet.beforeFirst();
}
catch(Exception ex) {
    return 0;
}
return size;

获取行数

票数 40
EN

Stack Overflow用户

发布于 2014-01-29 13:16:45

代码语言:javascript
复制
Statement s = cd.createStatement();
ResultSet r = s.executeQuery("SELECT COUNT(*) AS rowcount FROM FieldMaster");
r.next();
int count = r.getInt("rowcount");
r.close();
System.out.println("MyTable has " + count + " row(s).");

有时JDBC不支持下面的方法给出错误,如`TYPE_FORWARD_ONLY‘use this解决方案

在JDBC中不支持Sqlite。

代码语言:javascript
复制
resultSet.last();
size = resultSet.getRow();
resultSet.beforeFirst();

所以在那个时候使用这个解决方案。

票数 40
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7886462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档