这不是一个很简单的手术吗?但是,我看到既没有size()也没有length()方法。


当前回答

今天,我用了这个逻辑,为什么我不知道得到RS的计数。

int chkSize = 0;
if (rs.next()) {
    do {  ..... blah blah
        enter code here for each rs.
        chkSize++;
    } while (rs.next());
} else {
    enter code here for rs size = 0 
}
// good luck to u.

其他回答

我检查了ResultSet接口的运行时值,发现它几乎一直都是一个ResultSetImpl。ResultSetImpl有一个名为getUpdateCount()的方法,它返回您正在寻找的值。

下面的代码示例应该足够了: ResultSet ResultSet = executeQuery(sqlQuery); double rowCount = ((ResultSetImpl)resultSet).getUpdateCount()

我知道向下转换通常是一个不安全的过程,但这个方法还没有让我失败。

int i = 0;
while(rs.next()) {
    i++;
}

(速度考虑)

很多人在这里建议ResultSet.last(),但你需要打开连接作为一个ResultSet。TYPE_SCROLL_INSENSITIVE,对于Derby嵌入式数据库,它比ResultSet.TYPE_FORWARD_ONLY慢10倍。

根据我对嵌入式Derby和H2数据库的微型测试,在SELECT之前调用SELECT COUNT(*)要快得多。

下面是我的代码和基准测试的更详细信息

获取ResultSet大小的方法,不需要使用数组列表等

int size =0;  
if (rs != null)   
{  
rs.beforeFirst();  
 rs.last();  
size = rs.getRow();
}

现在你会得到大小,如果你想打印ResultSet,在打印之前使用以下一行代码,

rs.beforeFirst();  

最简单的方法,运行Count(*)查询,执行resultSet.next()指向第一行,然后执行resultSet.getString(1)获得计数。代码:

ResultSet rs = statement.executeQuery("Select Count(*) from your_db");
if(rs.next()) {
   int count = rs.getString(1).toInt()
}