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

新手上路,请多包涵

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

 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("--------------------------------------------------------");
    }

我试过这个:

 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.

原文由 user818700 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 910
2 个回答

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

connection.prepareStatement(sql,
  ResultSet.TYPE_SCROLL_INSENSITIVE,
  ResultSet.CONCUR_READ_ONLY);

这会以一种可以倒回光标的方式准备您的语句。这也记录在 ResultSet Javadoc

然而,一般来说,前进和后退游标对于大型结果集来说可能效率很低。 SQL Server 中的另一个选项是直接在 SQL 语句中计算总行数:

 SELECT my_table.*, count(*) over () total_rows
FROM my_table
WHERE ...

原文由 Lukas Eder 发布,翻译遵循 CC BY-SA 4.0 许可协议

Statement s = cd.createStatement();
ResultSet r = s.executeQuery("SELECT COUNT(*) AS recordCount FROM FieldMaster");
r.next();
int count = r.getInt("recordCount");
r.close();
System.out.println("MyTable has " + count + " row(s).");

有时 JDBC 不支持以下方法给出类似 `TYPE_FORWARD_ONLY’ 的错误使用此解决方案

JDBC 不支持 Sqlite。

 resultSet.last();
size = resultSet.getRow();
resultSet.beforeFirst();

所以当时就用这个解决方案。

原文由 Java Man 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题