pb debutant java/sql help please

vinc'03

Membre confirmé
12 Juillet 2004
55
4
36
Bonjour à tous
je fais un programme java avec une base de donnee.
Mon probleme:
j'ai fait une fenetre (interface graphique) pour faire un login.
De l'autre, j'ai une table avec des identifiants et des mots de passe.Mon probleme en fait est que je n'arive pas à faire verifier si les identifiants existent bien..

Voila mon code, pour le moment c juste avec les identifiants



public static void testeUnUtilisateur (String leNom, double password){
try{
Connection con = Utilisateurs.defaultCon;
Statement toutes= con.createStatement();
ResultSet toutesRS= toutes.executeQuery ("SELECt nom FROM Utilisateurs" );
while (toutesRS.next()){
if(leNom.equals(toutesRS)){
System.out.println("ok" );
}
else{
System.out.println("non" );
}
}



Donc en fait le truc c'est qu'il n'arrive pas à prendre les noms, donc il ne peut pas comparer...comment je peux faire?
Merci d'avance
jap.gif

vinc'03
 
Tu devrais trouver des réponses à tes questions ici :
http://java.developpez.com/faq/jdbc/?page=resultset#valeursRS

Au passage, une requête du type select id from utilisateurs where nom=? and password=? serait un peu plus propre que de récupérer toute ta table pour en parcourir les lignes à la main, je te dis pas le gâchis de ressources, tant en mémoire qu'en puissance de calcul. ;)
 
Hello!
merci j'ai trouvé mon bonheur, ca marche!!
Par contre j'ai une petite question pratique, en fait je fais touours un SELECT*FROM Utilisateurs.. donc apres ca m'affiche plein de fois "non" jusqu'à ce que ce soit la bonne ligne et que ca rentre dans mon if
Ma question est:
est il possible de faire un truc genre SELECT*FROM Utilisateurs WHERE nom=leNom...ou un truc comme ca pourque ca m'affiche non que si le nom n'est pas dans la table et pas à chaque fois que ca verifie un nom?...
Merci d'avance
vinc'
 
Tu dois pouvoir simplement construire ta requête en concaténant les chaînes de caractères : executeQuery("SELECT * FROM TABLE WHERE champ='"+nom+"'")

Mais la méthode la plus courante c'est le preparedstatement, qui permet de stocker les requêtes en cache et donc de gagner énormément en performance à leur exécution, je te renvoie encore une fois à la faq sur developpez.com :
http://java.developpez.com/faq/jdbc/?page=preparedstatement

En gros ça consiste à mettre des points d'interrogation dans ta requête là où tu veux inserérer le contenu des variables, puis à les renseigner ensuite.
 
Yes! ca marche impec' maintenant!
jte remercie bien pour ton coup de main, je pense que maintenant je devrais m'en sortir, mais bon, on sait jamais...
en tout cas merci
 
En fait j'ai encore une dernière petite question:
J'arrive très bien à selectionner le nom correspond dans la table avec le WHERE nom='"leNom"'
et à ce moment là avec une boucle if je vérifie que le mot de passe correspond bien aussi. Mais dans le cas où l'identifiant tapé n'existe pas dans la table, comment prévenir l'utilisateur avec un message d'avertissement?
Merci bien
Vinc'
 
En fait j'ai encore une dernière petite question:
J'arrive très bien à selectionner le nom correspond dans la table avec le WHERE nom='"leNom"'
et à ce moment là avec une boucle if je vérifie que le mot de passe correspond bien aussi. Mais dans le cas où l'identifiant tapé n'existe pas dans la table, comment prévenir l'utilisateur avec un message d'avertissement?
Merci bien
Vinc'
hu? avant de poser des questions faudrait peut-être lire un tuto nan ?

Je ne connais pas Java mais je suppose que ce que tu veux, c'est après le test if (pas boucle) si il renvoi faux, afficher un message à l'utilisateur. Si c'est ça alors il suffit d'utiliser else.
 
nan mais c'est pas ca le truc, c'est que en fait comme j'ai une commande Select*from Utilisateurs where (nom='"+leNom+"')
du coup ca me le met avant que je sois dans ma boucle while et if pour verifier le password et du coup, si l'indentifiant n'existe pas, alors je n'arrive pas a mettre un messae d'erreur. le else ne va que pour mon if(lePass==password), car du fait de ma requete sql, ca sert à rien de mettre un if pour verifier le nom vu qu'il sera tout le temp juste.
Merci pablo mais jpense pas que ce soit un else qui aille....
 
  • J’aime
Réactions: p4bl0
nan mais c'est pas ca le truc, c'est que en fait comme j'ai une commande Select*from Utilisateurs where (nom='"+leNom+"')
du coup ca me le met avant que je sois dans ma boucle while et if pour verifier le password et du coup, si l'indentifiant n'existe pas, alors je n'arrive pas a mettre un messae d'erreur. le else ne va que pour mon if(lePass==password), car du fait de ma requete sql, ca sert à rien de mettre un if pour verifier le nom vu qu'il sera tout le temp juste.
Merci pablo mais jpense pas que ce soit un else qui aille....
Je pense avoir compris. Ce que tu veux c'est afficher "le nom n'est pas dans la base de données" quand la requête SQL ne renvoie rien parce qu'aucun champs de la table `Utilisateurs` ne correspond à "... WHERE `nom`='"+leNom+"'" c'est ça ?

Je suppose que la fonction (on doit plutôt parler de méthode en Java je pense) executeQuery doit renvoyer quelque chose de spécial dans ce cas là, comme false ou un code d'erreur. Faut regarder dans la doc :)
 
Hello!
merci beaucoup ca marche impec!!!
par contre j'ai mis (resultat.next()) au lieu de (resultat.hasNext()) car il connaissait pas sinon..
Poiur ma culture générale, en gros, le "!" au debut du if a une fonction de négation genre "si le resulset n'est pas un nom alors..". donc je me demandais si ca marchait à chaque fois ou si c'était uniquement pour sql car sinon ce serait pas mal pratique en fait!!
voila c'est juste pour me coucher un peu moin bete ce soir..
En tout cas merci du coup de main!:zen:
vinc'
 
Pardon, je confondais, effectivement pour un resultset y'a pas de hasnext, ça c'est pour les parcours de liste...

Le "!" c'est un "not", ça inverse un résultat booléen. Donc ça ne marche que sur une fonction qui retourne un résultat booléen (true ou false).

Dans le cas des reslutset, la méthode next() positionne le curseur sur la ligne suivante, si il y a une ligne suivante, la méthode retourne "true", sinon, elle retourne "false".