日期:2014-05-16  浏览次数:20435 次

java获取resultset返回行

用 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();

?