使用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中检测到这一点。
感谢您的帮助。
答案 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);
}
}
}