用 JDBC(包括 Oracle JDBC 扩展)时,没有直接的(即标准的)方法可以使用 ResultSet 或 RowSet 获得查询所返回的行数。但是可以通过很少几行代码使用?Scrollable ResultSet?或?Cached RowSet?来获得此结果。以下列出了可以使用的不同方法的详细内容。
- 一种方法是在实际查询前执行?"SELECT COUNT(*)..."。
这意味着数据库引擎必须对相同的数据进行两次分析(一次用于计数,一次用于数据本身)。?
- 第二种方法使用 JDBC 2.0:
- 一种使用?Scrollable ResultSet
- 另一种使用?Cached RowSet?与普通(不可滚动)ResultSet 的组合。
JDBC 方法允许我们获得查询的行数而不必扫描所有的行或执行单独的?SELECT COUNT(*)。移到?Scrollable ResultSet/Cached RowSet 的尾部并获取其位置(resultset.last()/cachedRowset.last()?和resultset.getRow()/cachedRowset.getRow()),即可完成所需的工作。RowSet 扩展了 ResultSet 接口,因此我们可以使用普通的 ResultSet(而不是可滚动的)。
使用 Scrollable ResultSet 的说明:
- 如果 ResultSet 非常大,则?resultset.last()?有可能是非常费时的操作,因为它将使用服务器端的更多资源。因此,除非确实需要可滚动结果集,应避免使用这种方法。
- Oracle JDBC 驱动程序将使用?resultset.getRow()?返回正确的计数。但是其他供应商的实现方法可能会由resultset.getRow()?返回零。
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); rs.last(); int rowcount = rs.getRow();
?
?
使用 Oracle JDBC Cached RowSet
OracleCachedRowSet ocrs = new OracleCachedRowSet(); ocrs.populate(rs); ocrs.last(); int rowcount = ocrs.getRow(); if (ocrs != null) ocrs.close();
?