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.
Vous devez vous connecter pour publier un commentaire.
Une meilleure solution est d'oublier le nombre de lignes jusqu'à ce que vous avez correctement chargé le jeu de résultats dans un objet ou d'une collection. Vous pouvez garder le comptage du nombre de lignes avec l'une de ces options.
Il est important de fermer des jeux de résultats (et de toutes les ressources SQL comme rapport et de la Déclaration) dans le plus étroit de la portée de la méthode possible. Ce qui signifie pas de passant à jeu de résultats de la couche de persistance. Meilleure pour obtenir le nombre de lignes à l'aide d'une Collection de taille (appeler).
Arrêter de penser à des bases de données et commencer à penser en termes d'objets. Java est un langage orienté-objet.
count()
est parfaitement bien pour moi, mais pas dans ce cas. Nous avons l'habitude de le faire pour atteindre la pagination thingie.ArrayList
. Je veux dire, le coût amorti est négligeable, mais si je peux l'obtenir dès la première fois, pourquoi pas le droit? 🙂Vous pouvez exécuter
immédiatement après l'exécution de votre instruction SELECT pour trouver le nombre de lignes.
Vous pouvez toujours utiliser
SELECT COUNT()
avec exactement les mêmes conditions, avant l'SELECT
.duffymo
est très à droite. Quand vous déjà interrogé la base de données, pourquoi ne pas charger dans une Liste ou quelque chose.Si vous utilisez la version 6 de Java, vous pouvez utiliser le JDBC4ResultSet de la classe qui a le getUpdateCount méthode qui retourne le nombre de lignes affectées par une requête SQL, même pour une Instruction Select.
Voir ci-dessous l'exemple de code:
J'espère que cette aide!
Voici ma solution à cette question (puisque la plupart du temps, je veux le nombre d'enregistrements renvoyés pour construire un tableau ou quelque chose de similaire): Utiliser une collection comme Vector<T> à la place.
Propre et simple, non? Fonctionne quel que soit la taille de l'ensemble d'enregistrements retournés (pas besoin de connaître la taille avant de la main) et rend toutes les
List
méthodes disponibles.Cela m'a bien servi pendant un temps, mais si quelqu'un voit une faille dans cette, s'il vous plaît laissez-moi savoir. Toujours envie de faire mes pratiques mieux, tu sais.
Vous pouvez également utiliser de la façon suivante pour obtenir le nombre total d'enregistrements dans le jeu de résultats:
compter est le nombre total de lignes renvoyées pour votre jeu de résultats. 😉
Voir ci-dessous l'exemple de code avec la solution de Lalith :