Resultset n'a pas de méthode pour hasNext. Je veux vérifier si le resultSet a une valeur.
Est-ce la bonne façon de procéder ?
if (!resultSet.next() ) {
System.out.println("no data");
}
Resultset n'a pas de méthode pour hasNext. Je veux vérifier si le resultSet a une valeur.
Est-ce la bonne façon de procéder ?
if (!resultSet.next() ) {
System.out.println("no data");
}
En supposant que vous travaillez avec une personne nouvellement retournée ResultSet
dont le curseur pointe avant la première ligne, une manière plus simple de vérifier cela est d'appeler simplement isBeforeFirst()
. Cela évite de devoir revenir en arrière si les données doivent être lues.
Comme expliqué dans la documentation ce qui renvoie false si le curseur n'est pas avant le premier enregistrement ou si il n'y a pas de lignes dans le ResultSet .
if (!resultSet.isBeforeFirst() ) {
System.out.println("No data");
}
Merci, oui je sais mais j'ai rencontré le même problème et je n'étais pas satisfait de l'aspect de l'avance pour vérifier puis du recul pour lire. J'ai pensé que cette solution plus simple pourrait profiter à d'autres personnes qui se trouvent dans la même situation.
Notez que, au moins pour DB2, le jeu de résultats doit être de type "scrollable". Ceci peut être défini lorsque vous créez l'instruction à exécuter.
C'est exact, au départ le ResultSet
Le curseur de l'utilisateur pointe avant la première ligne, si le premier appel à next()
renvoie à false
alors il n'y avait pas de données dans le ResultSet
.
Si vous utilisez cette méthode, vous devrez peut-être appeler beforeFirst()
immédiatement après pour le réinitialiser, puisqu'il s'est positionné au-delà de la première rangée maintenant.
Il convient toutefois de noter que Réponse de Seifer Il existe ci-dessous une solution plus élégante à cette question.
Mais gardez à l'esprit que s'il y a plusieurs lignes, après ce test, vous pointerez vers la première ligne. Assurez-vous donc de ne pas sauter de ligne par accident.
@MatthewFlaschen, vous avez raison, pour résoudre le problème du saut de la première ligne, j'ai utilisé un do { ... } while (rs.next) ;
Vous feriez normalement quelque chose comme ça :
while ( resultSet.next() ) {
// Read the next item
resultSet.getString("columnName");
}
Si vous voulez signaler un ensemble vide, ajoutez une variable comptant les éléments lus. Si vous n'avez besoin de lire qu'un seul élément, alors votre code est adéquat.
Cela fonctionnerait si vous voulez voir s'il y a des lignes dans le jeu de résultats oui.
Notez que next()
passe toujours à la ligne suivante, donc si vous prévoyez d'effectuer une lecture de l'ensemble des résultats, vous devez en tenir compte.
L'usage habituel avec ResultSet (lors d'une simple lecture) est :
while (resultSet.next())
{
... read from the row here ...
}
Ce qui évidemment ne fonctionnera pas correctement si vous avez invoqué next()
une fois déjà pour vérifier si le jeu de résultats était vide, alors faites attention à cela. Bien qu'il existe des méthodes pour "sauvegarder", elles ne sont pas prises en charge pour tous les types d'ensembles de résultats.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
4 votes
Pour les futurs lecteurs comme moi : les réponses qui m'ont aidé sont celles de Felype et de Dermot Doherty.