/ / Comment puis-je déterminer que setMaxRows a limité le nombre de lignes renvoyées (JDBC) - java, mysql, jdbc, dao

Comment puis-je déterminer que setMaxRows a limité le nombre de lignes renvoyées (JDBC) - java, mysql, jdbc, dao

Utilisation de JDBC et d’aucun framework particulier comme les bibliothèques Hibernate ou JSTL. (juste pilote JDBC mysql-connector-java-5.1.34-bin.jar)

Soit une table qui a entre 20 et 25 lignes etune instruction préparée sur laquelle j'ai défini .setMaxRows (20), comment puis-je déterminer que les 20 lignes renvoyées étaient en fait sur plus de 20 lignes? (J'ai aussi essayé avec ... LIMITE 20 dans l'instruction SQL)

Je sais que JSTL fait ${myRs.limitedByMaxRows} disponible lors de l'utilisation <sql:query var="myRs" ... maxRows="20">... mais je voudrais savoir comment cela peut être détecté à partir d’un DAO pojo.

Merci de votre aide.

Réponses:

0 pour la réponse № 1

J'ai regardé dans la source du connecteur MySQL et il s'avère que MysqlIO.readSingleRowSet n'indique pas si le résultat renvoyé était réellement limité en utilisant setMaxRows sur la déclaration préparée.

Comme pour le JSTL sql tag et sa mise en œuvre de maxRows, c’est un peu trompeur. Il n’utilise pas réellement .setMaxRows() sur son instruction préparée, en particulier parce qu’il doit déterminer si la limite a été atteinte mais qu’il existe plus de lignes pour pouvoir définir limitedByMaxRows à true. Donc, la requête exécutée sur la base de données n'est pas réellement limité.

Donc, la solution que je vais implémenter dans un POJO lors de la configuration .setMaxRows() est comme suit:

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