如何检查结果集是否有一行或多行?

2022-09-01 19:12:54

如何使用JDBC检查结果集是否有一行或多行?


答案 1
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");
boolean isMoreThanOneRow = rs.first() && rs.next();

你没有问这个,但你可能需要它:

boolean isEmpty = ! rs.first();

通常,我们不需要行计数,因为我们使用 WHILE 循环来循环访问结果集,而不是 FOR 循环:

ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");
while (rs.next()) {
    // retrieve and print the values for the current row
    int i = rs.getInt("a");
    String s = rs.getString("b");
    float f = rs.getFloat("c");
    System.out.println("ROW = " + i + " " + s + " " + f);
}

但是,在某些情况下,您可能希望对结果进行窗口化,并且需要提前记录计数才能向用户显示类似 的内容。您可以使用 first 执行单独的查询,以获取记录计数,但请注意,计数只是近似值,因为可以在执行两个查询所需的时间之间添加或删除行。Row 1 to 10 of 100SELECT COUNT(*)

来自结果集概述的示例


答案 2

有很多选择,由于你没有提供更多的上下文,所以唯一剩下的就是猜测。我的答案按复杂性和性能升序排序。

  1. 只需运行并得到答案。您必须运行另一个实际选择并返回数据的查询。select count(1) FROM ...
  2. 迭代并计数,直到你快乐。然后,如果仍然需要实际数据,请重新运行相同的查询。rs.next()
  3. 如果您的驱动程序支持向后迭代,请进行几次,然后使用 倒带返回。rs.next()rs.previous()

推荐