Rechercher : dans
Par :

Requet SQL sous eclipse

Dernière réponse le 15 sep 2009 à 18:48:40 angelus, le 7 sep 2009 à 15:16:22 
 Signaler ce message aux modérateurs

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);
}
}

Configuration: Windows XP Internet Explorer 6.0

Meilleures réponses pour « requet SQL sous eclipse » dans :
Gestion des paramètres SQL VoirSQL présente un certain nombre de paramètres au niveau d'Oracle qu'il est possible de visualiser à travers la commande : SHOW ALL Pour modifier la valeur d'un paramètre il suffit d'utiliser la commande : SET NOM_PARAM VALEUR
Le langage SQL VoirQu'appelle-t-on SQL? SQL (Structured Query Language, traduisez Langage de requêtes structuré) est un langage de définition de données (LDD, ou en anglais DDL Data Definition Language), un langage de manipulation de données (LMD, ou en anglais DML,...
SQL - Création de table VoirLe SQL, comportant un langage de définition de données (LDD), permet de créer des tables. Pour cela, il utilise le couple de mots clés CREATE TABLE. La création de tables Le création de tables se fait à l'aide du couple de mots-clés CREATE...
SQL - Commande SELECT VoirLe langage de manipulation de données Le SQL est à la fois un langage de manipulation de données et un langage de définition de données. Toutefois, la définition de données est l'oeuvre de l'administrateur de la base de données, c'est pourquoi la...

1

kij_82, le 7 sep 2009 à 16:25:44

Bonjour,

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

~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :)    ~

Répondre à kij_82

3

angelus, le 8 sep 2009 à 17:09:37

J'ai aussi ce message :

Connexion succeded with DB
echec pilote hlr: java.sql.SQLException: Before start of result set

Répondre à angelus

2

angelus, le 8 sep 2009 à 17:03:37

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)

Répondre à angelus

4

kij_82, le 8 sep 2009 à 17:19:36

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.

~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :)    ~

Répondre à kij_82

5

angelus, le 10 sep 2009 à 15:39:26

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)

Répondre à angelus

6

kij_82, le 11 sep 2009 à 10:25:16

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.

~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :)    ~

Répondre à kij_82

7

angelus, le 11 sep 2009 à 14:17:25

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!!!!!!!?

Répondre à angelus

8

angelus, le 12 sep 2009 à 17:00:26

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?

Répondre à angelus

9

kij_82, le 14 sep 2009 à 09:08:40

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.


~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :)    ~

Répondre à kij_82

12

 angelus, le 15 sep 2009 à 18:48:40

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

Répondre à angelus

10

simo_tsdi, le 14 sep 2009 à 17:24:02

Je pense ke "pwd" est réservé
eseeyer de changer la nomination du pwd au sein de la base de données

Répondre à simo_tsdi

11

angelus, le 15 sep 2009 à 18:29:50

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.

Répondre à angelus