如何确定setMaxRows限制返回的行数(JDBC)

时间:2015-02-27 13:59:18

标签: java mysql jdbc dao

使用JDBC而不是像Hibernate或JSTL库这样的特定框架。 (只是JDBC驱动程序 mysql-connector-java-5.1.34-bin.jar

如果一个表有20到25行,并且我已经设置了一个预设语句.setMaxRows(20),我如何确定返回的20行实际上超出了20行? (我也尝试过使用SQL语句中的 LIMIT 20

我知道JSTL在使用${myRs.limitedByMaxRows}时可以<sql:query var="myRs" ... maxRows="20">...可用,但我想了解如何在pojo DAO中检测到这一点。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我查看了MySQL连接器的来源,结果发现 MysqlIO.readSingleRowSet 并不表示在预准备语句中使用setMaxRows是否实际限制了返回的结果。 / p>

对于JSTL sql 标记及其maxRows的实现,这有点误导。它实际上并没有在其准备好的语句中使用.setMaxRows(),特别是因为它需要确定是否已达到限制但存在更多行,以便能够将limitedByMaxRows设置为true。因此,在DB上执行的查询不是实际上受限制。

因此,设置.setMaxRows()时我将在POJO中实施的解决方案如下:

if (pstmt.getMaxRows() > 0 && rowCount == pstmt.getMaxRows()) {
  try ( ResultSet countRs =
      conn.createStatement().executeQuery("select count(*) from INVENTORY") 
      ) {
    if (countRs.first()) {
      limitReached = rowCount < countRs.getInt(1);
    }
  }
}