Que signifie “if (rs.next ())”?
Je suis actuellement à l'obtention de l'erreur,
java.sql.SQLException: Method 'executeQuery(String)' not allowed on prepared statement.
parce que je suis en utilisant
PreparedStatement stmt = conn.prepareStatement(sql);
et a également eu
ResultSet rs = stmt.executeQuery(sql);
dans mon code.
J'ai maintenant besoin de retirer le jeu de résultats en ligne, mais qui me laisse à d'avoir à traiter avec le code suivant:
if (rs.next()) {
messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("login.successful"));
request.getSession(true).setAttribute("USERNAME", rs.getString("USERNAME"));
request.getSession(true).setAttribute("BALANCE", rs.getString("BALANCE"));
request.setAttribute("msg", "Logged in successfully");
Je ne suis pas sûr que je comprends parfaitement ce que
if (rs.next())
. Quelqu'un pourrait-il expliquer ce code pour moi? Si j'ai une meilleure compréhension de ce que je crois que je vais avoir une meilleure idée sur la manière de traiter à l'aide de la PreparedStatement résultats avec la logique utilisée pour rs. Aussi toute aide pour faire face à l'évolution de cette logique serait grandement apprécié.
OriginalL'auteur Turk | 2011-11-20
Vous devez vous connecter pour publier un commentaire.
Comme du béton de problème avec ça
SQLException
, vous devez remplacerpar
parce que vous êtes à l'aide de la
PreparedStatement
sous-classe au lieu deStatement
. Lors de l'utilisation dePreparedStatement
, vous avez déjà passé dans la chaîne SQL pourConnection#prepareStatement()
. Vous avez juste à régler les paramètres sur elle et ensuite appelerexecuteQuery()
méthode directement, sans re-passage de la chaîne SQL.Voir aussi:
À la question concrète sur
rs.next()
, il déplace le curseur à la ligne suivante du résultat à partir de la base de données et renvoietrue
si il ya une ligne, sinonfalse
. En combinaison avec laif
déclaration (au lieu de lawhile
) cela signifie que le programmeur est en attente ou intéressé par une seule ligne, la première rangée.Voir aussi:
ResultSet#next()
méthodePour votre défense, à l'exception explication n'est pas très clair à tous. Il implique que vous avez utilisé la mauvaise méthode et PAS le mauvais paramètre.
OriginalL'auteur BalusC
Je suis en supposant que vous êtes à l'aide de Java 6 et que le jeu de résultats que vous utilisez est un
java.sql.ResultSet
.La JavaDoc pour le jeu de résultats.la méthode next() états:
Donc,
if(rs.next(){ //do something }
signifie "Si le jeu de résultats a encore résultats de, passer à la prochaine et de faire quelque chose".Comme BalusC souligné, vous devez remplacer
avec
Parce que vous avez déjà mis le SQL à utiliser dans la déclaration auprès de votre ligne précédente
Si vous n'étiez pas à l'aide de la
PreparedStatement
, puisResultSet rs = stmt.executeQuery(sql);
serait de travailler.Se sentir libre pour upvote si elle a été utile 🙂
désolé, de ne pas avoir assez de rep pour le faire.
OriginalL'auteur chrisbunney
La
next()
déplace le curseur de la fausseté d'une ligne à partir de sa position actuelle dans leresultset
. de sorte que son évident queif(rs.next())
signifie que si la ligne suivante n'est pasnull
(si elle existe), Aller de l'Avant.Maintenant w.r.t votre problème,
noter que executeQuery(String) est utilisé dans le cas où vous utilisez un sql-query string.
Alors que lorsque vous utilisez un PreparedStatement, utilisez executeQuery() qui exécute la requête SQL dans ce
PreparedStatement
objet et renvoie leResultSet
objet généré par la requête.Solution :
Utilisation :
ResultSet rs = stmt.executeQuery();
OriginalL'auteur COD3BOY
La
next()
méthode (officiel doc ici), il suffit de déplacer le pointeur de l'ensemble des lignes de résultat à la ligne suivante (si elle le peut). De toute façon, vous pouvez lire ceci à partir de la doc officiel:Cette méthode retourne true si il y a une autre ligne ou false dans le cas contraire.
OriginalL'auteur Aurelio De Rosa
Regardez la photo, c'est un résultat d'une requête select * from employé
et la méthode next() de la classe ResultSet de l'aide pour déplacer le curseur à la ligne suivante d'un jeu de résultats retourné qui est de rs dans votre exemple.
🙂
OriginalL'auteur Ali Ben Messaoud
Depuis le Jeu de résultats est une interface, Lorsque vous obtenez une référence à un jeu de résultats par le biais d'un JDBC appel, vous obtenez une instance d'une classe qui implémente l'interface ResultSet. Cette classe fournit des implémentations concrètes de tous les ResultSet méthodes.
Interfaces sont utilisées pour le divorce de mise en œuvre de l'interface. Cela permet la création d'algorithmes génériques et l'abstraction de la création de l'objet. Par exemple, les pilotes JDBC pour différentes bases de données sera de retour différents ResultSet implémentations, mais vous n'avez pas à modifier votre code pour le faire fonctionner avec les différents pilotes
En très bref, si votre jeu de résultats contient résultat, puis à l'aide de rs.prochaine retourner vrai si vous avez le jeu d'enregistrements sinon elle retourne false.
OriginalL'auteur Robin
Première chose, vous n'avez pas besoin d'écrire
il suffit d'écrire
Mentionné ci-dessus syntaxe est utilisée pour les Déclarations non pas pour PreparedStatement.
Deuxième chose, rs.next() vérifie si le jeu de résultats contient toutes les valeurs ou non. Elle renvoie une valeur booléenne que bien qu'il déplace le curseur à la première valeur dans le jeu de résultats parce que d'abord c'est à dire AVANT la PREMIÈRE Position. Donc, si vous voulez accéder à la première valeur dans le jeu de résultats, vous avez besoin d'écrire rs.next().
OriginalL'auteur gprathour