Requet SQL sous eclipse

Résolu/Fermé
angelus - 7 sept. 2009 à 15:16
 angelus - 15 sept. 2009 à 18:48
Bonjour à tous!

je suis entrain de developer un petit prog dans lequel j'ai besoin de lire une variable d'indentification dans le BD pendant l'authentification. Cette variable me permet de determiner le type d'utilisateur ( admin ou user). Quand je compile le prog ( sous eclipse), la connexion à la BD est faite mais par la suite j'ai un message d'erreur( sqlexception). Voici la methode que j'utilise pour l'authentification, quelqu'un peut me dire quel est le probleme avec cette methode et me donne une meilleur description SVP?


import java.sql.*;

public class auth
{
Connection cn=null;
Statement st=null;
ResultSet rs, rs2;
String rs1;
boolean loged;

public auth(String log,String pwd){

String pilote = "com.mysql.jdbc.Driver";

try {
Class.forName(pilote).newInstance(); //Le driver de MySql
String url="jdbc:mysql://localhost:3306/hlr"; //Chemein de la base
cn=DriverManager.getConnection(url, "root", "angelus"); //Connection à la base
if(!cn.isClosed())
System.out.println("Connexion succeded with DB");
else
System.err.println("Connexion failed with DB");
st=cn.createStatement(); //options du resultset
rs=st.executeQuery("SELECT nom, pwd FROM personne WHERE nom='"+log+"' AND pwd='"+pwd+"'");
if(rs.next())
{
loged=true;
rs2=st.executeQuery("SELECT type_user FROM personne WHERE nom='"+log+"' AND pwd='"+pwd+"'");
rs1 = rs2.getString("type_user");
System.out.println(rs1);

}
else loged=false;


}
catch (Exception e){

System.out.println("echec pilote : "+e);
}
finally{
try {
st.close();
cn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}
public boolean isLoged(){
return loged;
}

public String inType(){
return (rs1);
}
}

6 réponses

kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
7 sept. 2009 à 16:25
Bonjour,

Peux-tu mettre la ligne où l'erreur survient, ainsi que le message d'erreur (met nous le tout le printStackTrace() à la rigueur)
0
j'ai aussi ce message :

Connexion succeded with DB
echec pilote hlr: java.sql.SQLException: Before start of result set
0
bonjour!
enfait je crois que les ligne qui pose probleme sous les suivant:

if(rs.next())
{
loged=true;
rs2=st.executeQuery("SELECT type_user FROM personne WHERE nom='"+log+"' AND pwd='"+pwd+"'");
rs1 = rs2.getString("type_user");
System.out.println(rs1);

}

voici ci-dessous le message d'erreur que j'obtien en console:


erreur commande sql
Loged
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at identificateur.actionPerformed(identificateur.java:72)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
0
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
8 sept. 2009 à 17:19
Ok, le message est clair, tu as un nullPointer sur la ligne 72 dans ta classe Identificateur.

Or le code que tu donne n'est pas celui de la classe Identificateur.

Donc j'en déduit que ta classe Identificateur fait appel via un event à la classe que tu as donné plus haut, c'est ca ? (vu les logs)
Si ce n'est pas le cas alors tu t'es planté d'endroit je pense.

Sinon dans le message d'erreur, à quoi correspondent les traces "erreur commande sql" et "logged" ?

Dans tous les cas, si le bout de code que tu as donné plante, tu devrais le tester indépendamment du reste du programme, en faisant par exemple un main qui instancie un objet de la classe que tu as donné, comme ça on aura des traces plus parlante pour les erreurs.
0
en effet la class identification sert d'interface utilisateur pour entrer des parametre d'identification,elle appel la class auth donc j'ai donné la code pour le traitement de ces parametre( la verification dans la BD) d'ou le "logged" de la console.

en faisant des testes sur le code :

rs=st.executeQuery("SELECT nom, pwd FROM personne WHERE nom='"+log+"' AND pwd='"+pwd+"'");
if(rs.next())
{
loged=true;
rs2=st.executeQuery("SELECT type_user FROM personne WHERE nom='"+log+"' AND pwd='"+pwd+"'");
rs1 = rs2.getString("type_user");
System.out.println(rs1);

}
else loged=false;


j'obtien les message suivant en console:

Connexion succeded with DB
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Unknown column 'moi' in 'where clause'

en passant "moi' comment parametre de reference pour le trie dans la BD ("moi" exsiste dans la BD)
0
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
11 sept. 2009 à 10:25
mum, je ne vois pas comment un tel message d'erreur peut s'afficher (l'histoire du 'unknown column 'moi').

Par contre j'ai un gros doute sur ta seconde requête SQL.

Au vu de la première qui te sert de log-on en quelque sorte, tu as donc une table 'personne' comprenant au moins les champs suivants :
- id_user
- nom
- pwd

Dans ta seconde requête, tu récupère le type de la personne, faisant référence à la table 'type_user'.
Or, pour sélectionner cette information, tu fais exactement la même requête, en utilisant à nouveau les champs 'nom' et 'pwd', mais je doute quand même que tu ai répété ces informations dans cette table, non ?

Pourrais-je donc avoir la structure de tes tables SQL pour y voir plus clair ?

Normalement, tu dois avoir une table 'type', avec les champs 'id_type', 'libellé', etc. puis une table de jonction (ce que l'on appelle une association) 'type_user' avec les champs 'id_type' et 'id_user', ceci dans le but de lier une personne à son type.
0
en fait, la structure de la table persoone sur laquel je fait le trie contient les infos suivants.

-id_personne
-pwd
-type_user
-adresseIP

au vue de cette structure la requet devrai passer!!!!!!!?
0
bonjour!
en fait je me rend compte que a chaque fois que je fait appel à deux commande sql dans la même class elle ne fonctionnent pas. as-tu une astuce pour pour resordre ce probleme?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
14 sept. 2009 à 09:08
Bonjour,

Je crois que c'est parce que tu ne recréé par ton objet Statement à chaque fois avant d'exécuter une requête.
Peux-tu essayer de recréer et / ou flusher / ré-initialiser cet objet avant de faire à nouveau un executeQuery avec.

0
bonjour,

merci sa marche maintement!!!

Sinon j'ai un autre problem avec mon socket TCP. Pour tout vous dire la class identification qui est l'interface utilisateur reçoit le donner saisis et les envoi vers le serveur via un socket, grace a la class auth sur laquelle nous travaillions les parametre sont verifier et revoyer vers la class identifcation pour deverouiller le system. Le probleme intervien au niveau de l'envoi des données du serveur vers la class identificateur(les donn"es ont semble alterer.

peuvez-vous m'orianter sur ces suject?

quelqu'un peut me dire comment je fait pour avoir ce fichier:

-Apache Software Foundation\Tomcat 5.5\common\lib\
-Apache Software Foundation\Tomcat 5.5\shared\lib\

Merci d'avance pour votre aide
0
simo_tsdi Messages postés 37 Date d'inscription vendredi 14 mars 2008 Statut Membre Dernière intervention 2 février 2010 2
14 sept. 2009 à 17:24
je pense ke "pwd" est réservé
eseeyer de changer la nomination du pwd au sein de la base de données
0
bonjour,

merci de tes recommandation j'ai re-ecrit la methode en reinitialisant mon statment a chaque fois et sa marche.

une fois de plus merci pour le coup de main.
0