Obtenir le nombre de lignes dans un jeu de résultats Java

Quelqu'un sait-il un meilleur moyen d'obtenir le nombre de lignes dans un jeu de résultats Java retourné à partir d'une base de données MySQL? Le jeu de résultats renvoyé n'est pas le nombre total de lignes lues à partir de la base de données, donc je ne pense pas que je peux utiliser SQL COUNT fonction d'agrégation.

public static int getResultSetRowCount(ResultSet resultSet) {
    int size = 0;
    try {
        resultSet.last();
        size = resultSet.getRow();
        resultSet.beforeFirst();
    }
    catch(Exception ex) {
        return 0;
    }
    return size;
}
  • L'appel de jeu de résultats.last() sera la cause d'un résultat en fait une itération sur tous les dossiers - de sorte qu'il est clairement inefficace. En outre, il sera force de toutes les données en cache pour la mémoire même si vous n'avez pas besoin pour l'instant. Aucune raison pourquoi vous avez dit "il jeu de résultats renvoyé n'est pas le nombre total de lignes lues à partir de la base de données" ?
  • Pourquoi pensez-vous que ce sera une itération à tous les cours? Je ne pouvais pas trouver quelque chose comme cela dans les docs.
  • Les données lues à partir de la table de base de données sera un sous-ensemble de la table de données, plutôt que toutes les données dans la table. Je suis curieux de savoir le 'itération sur tous les" si.
  • Ansari: je ne suis pas certain à 100%, j'ai décompilé Oracle jeux de résultats et que dans le flux de l'invocation de la "last () la méthode de la" cacheAllRows () la méthode est appelée, et que la méthode commence par " while(resultSet.next())'. Je suppose que le pilote MySQL de ne pas avoir quelque chose de mieux à faire.
  • Morgan: en tant Que certaines des réponses ci-dessous indique - si vous avez un SQL qui récupère les données, vous pouvez avoir le même retour COUNT() - je ne vois pas de raison pourquoi il ne peut pas travailler.
  • Cette clause catch semble un peu suspect. Je voudrais propager les exceptions, mais au moins, je retourne -1 en ce catch.

InformationsquelleAutor Mr Morgan | 2010-06-16