如何从结果中获取行数?

时间:2014-09-10 10:52:10

标签: java sql oracle jdbc

我使用以下方法确定我的结果集不为空并继续对值进行断言。

...
resultSet = statement.executeQuery("select count(*) as rowCount from tbName where...");

while (resultSet.next()) {
   rowCount = Integer.parseInt(resultSet.getString("rowCount"));
}

Assert.assertTrue(rowCount > 0);

resultSet = statement.executeQuery("select * from tbName where ...");
while (resultSet.next()) {
    //do some assertions on values here.
}
...

无论如何直接在一个查询中直接从resultSet获取行数?像下面的东西?

resultSet = statement.executeQuery("select * from tbName where ...");
if( resultSet.count/length/size > 0) {

}

3 个答案:

答案 0 :(得分:3)

您可以更改查询以包含行计数的列:

select t.*, count(*) over () as row_count
from tbName t
where ...

然后你可以使用

获得计数
int rowCount  rs.getInt("row_count");

请注意,您不会获得0计数,因为这意味着实际查询首先没有返回任何内容。因此,您无法使用它来验证您的查询是否返回任何内容。如果想要检查结果是否为空,请使用next()

resultSet = statement.executeQuery(".....");
if (resultSet.next()) {
   // at least one row returned
} else {
  // no rows returned at all 
}

顺便说一句:您应该始终使用与列数据类型匹配的getXXX()方法。在所有列上使用getString()不是一个好主意。

答案 1 :(得分:1)

1)将光标移动到最后一行: resultset.last();

2)检索当前行号: int count = resultset.getRow();

提示: 它基于你通过调用函数创建一个语句“    语句createStatement(int resultSetType,int resultSetConcurrency)                           抛出SQLException“ 生成可滚动的resultSet。

答案 2 :(得分:0)

有两种方法可以获得行数。 1)如果要检查表中存在的行数,可以使用计数查询。 2)如果要计算结果集中的行数,则必须遍历该结果集以计算行数。