/ / Jak mogę ustalić, że setMaxRows ogranicza liczbę zwracanych wierszy (JDBC) - java, mysql, jdbc, dao

Jak ustalić, że setMaxRows ograniczył liczbę zwróconych wierszy (JDBC) - java, mysql, jdbc, dao

Korzystanie z JDBC i bez szczególnych ram, takich jak Hibernacja lub biblioteki JSTL. (tylko sterownik JDBC mysql-connector-java-5.1.34-bin.jar)

Biorąc pod uwagę tabelę zawierającą od 20 do 25 wierszy iprzygotowane oświadczenie, na którym ustawiłem .setMaxRows (20), w jaki sposób mogę ustalić, że 20 zwróconych wierszy było w rzeczywistości z więcej niż 20 wierszy? (Próbowałem też z ... LIMIT 20 w instrukcji SQL)

Wiem, że robi to JSTL ${myRs.limitedByMaxRows} dostępne podczas korzystania <sql:query var="myRs" ... maxRows="20">... ale chciałbym dowiedzieć się, jak można to wykryć w ramach DAO.

Dziękuję za pomoc.

Odpowiedzi:

0 dla odpowiedzi № 1

Zajrzałem do źródła złącza MySQL i okazało się, że MysqlIO.readSingleRowSet nie wskazuje, czy zwracany wynik był faktycznie ograniczony przy użyciu setMaxRows na przygotowanym wyciągu.

Co do JSTL sql tag i jego implementacja maxRows, jest to nieco mylące. Właściwie to nie używa .setMaxRows() na przygotowanym zestawieniu, zwłaszcza że musi ustalić, czy limit został osiągnięty, ale istnieje więcej wierszy, aby móc go ustawić limitedByMaxRows do true. Zatem zapytanie wykonane na bazie danych nie jest tak właściwie ograniczony.

Więc rozwiązanie, które wprowadzę w POJO podczas ustawiania .setMaxRows() następująco:

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);
}
}
}