IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

Erreur de requête


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 107
    Par défaut Erreur de requête
    Bonjour tousss
    J'avais un probleme dans ma fonction aurhentif, qui prends 2 parametres (login, password), je connecte à la base de données chateurs, et vérifie si ces parametres passés sont vrais ou pas. La requete ne s'exécute pas
    Sachant que si je change ma requete, (select * from chateurs) et je faits l'affichage dans Main, ça se connecte et fonctionne, dans le probleme au niveau de la requte
    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    import java.sql.*;
     
    public class Authentif {
    	public static int Authentif(String login1, String passwd1) {
    		Connection c = null;
    		int a = 10;
    		PreparedStatement ps = null;
    		ResultSet res = null;
    		try {
     
    	String query = ("select * from chateurs where login="+login1+" and password="+passwd1+";");						Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    	c = DriverManager.getConnection("jdbc:Odbc:EtudiantDB");
     
    			ps = c.prepareStatement(query);
    			res = ps.executeQuery();
     
     
    		}  catch (ClassNotFoundException e) {
    			e.getStackTrace();
    		}
    		catch (SQLException e) {
    			e.getStackTrace();
    		}
     
    		if (res == null)
    			a = 1;
    		else
    			a = 0;
    		return a;
    	}
     
    	public static void main(String[] args) {
    		String login = "user1";
    		String password = "user1";
    		System.out.println(Authentif(login, password));
     
    	}
     
    }

  2. #2
    Membre confirmé Avatar de NizarK
    Inscrit en
    Mars 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 189
    Par défaut
    Il faut donner plus de détails pour que quelqu'un puisse t'aider .

    Comment tu as su que ta requête ne s'éxécute pas : il ya une exception ou un comportement qui ne correspond pas à ton besoin ??

  3. #3
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 107
    Par défaut
    Merci frere Nizar
    Bon,comme je vais ai dits, quands je change la requete en: String query= ("select * from chateurs"); ça fonctionne.
    Mais quand je la rends:String query = ("select * from chateurs where login="+login1+" and password="+passwd1+";"); ça fonctionne pas.
    Aussi j'ai ajoutés des println, devant quaque ligne. le println qui est juste aprés: res = ps.executeQuery(); ne s'affiche pas
    j'espere que c clair.

  4. #4
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Ta requête finale ne contient-elle pas une erreur de syntaxe ? Les ';' multiples dans la requêtes me paraissent suspects (bien que je ne sois pas un spécialiste du SQL). De plus, j'aurais rajouté des "quotes" autour de tes champs login et password :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT * FROM chateurs WHERE login='"+login1+"' and password='"+passwd1+"';")
    Mieux encore, avec la classe PreparedStatement, utilise les requêtes paramétrées : c'est plus propre, et java gérera pour toi les problèmes de quotes (et de caractères spéciaux) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT * FROM chateurs WHERE login= ? and password= ?"
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  5. #5
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 107
    Par défaut
    Merci Ferere Modérateur
    Je vais essayer avec les PreparedStatement, et si vous permetter svp de me donner la squelette généralle en bref.

  6. #6
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 107
    Par défaut
    voila, je l'ai faits comme vous avez dits, avec les PreparedStatement
    et c la meme chose:
    Il me rends tjrs 0 comme retour !!!
    package Authentif;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    import java.sql.*;
     
    public class Authentif2 {
        public static int Authentif(String login1, String passwd1) {
            Connection c = null;
            int a = 10;
            PreparedStatement ps = null;
            ResultSet res = null;
            String query = "select * from chateurs where login=? and password=?";
            try {
     
                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                c = DriverManager.getConnection("jdbc:Odbc:EtudiantDB");
                PreparedStatement pr = c.prepareStatement(query);
     
     
                ps = c.prepareStatement(query);
                ps.setString(1, login1);
                ps.setString(2, passwd1);
                res = ps.executeQuery();
     
     
            } catch (ClassNotFoundException e) {
                e.getStackTrace();
            } catch (SQLException e) {
                e.getStackTrace();
            }
     
            if (res == null)
                a = 1;
            else
                a = 0;
            return a;
        }
     
        public static void main(String[] args) {
            String login = "user1";
            String password = "user1";
            System.out.println(Authentif(login, password));
     
        }
     
    }

  7. #7
    Membre confirmé Avatar de NizarK
    Inscrit en
    Mars 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 189
    Par défaut
    Voilà ce que tu as mis dans ton dernier post
    if (res == null)
    a = 1;
    else
    a = 0;
    return a;
    }
    C'est normal qu'il te retourne 0 puisque res n'est pas null .

    En plus, si ce que tu veux faire c'est qu'il te retourne 0 si le resultset est vide et 1 sinon , je crois que ce qu'il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if(res.next()) return 1
    else return 0;

  8. #8
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 107
    Par défaut
    oui, je suis d'accords avec toi
    Mais ou mettre cet instruction la?
    - Si je la met dans le try{}, la fonction ne voit pas le "a" ,le compilateur me dit qu'il faut un retour pour cette fonction,
    et si je la mets hors try{}, res.next() va générer une exception, donc je suis obligé de la mettre dans le try{}.
    ........... je suis vrmt bloqué

  9. #9
    Membre confirmé Avatar de NizarK
    Inscrit en
    Mars 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 189
    Par défaut
    il suffit de mettre des return 0 dans chaque bloc catch{} après les e.printstacktrace()...

  10. #10
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 107
    Par défaut
    Merci ami pour ta suivie
    mais je pense que m'avais pas compris
    Je veux pas retourner 0 en fin de compte, je veux retourner ou bien 0( si la requete à du retour) ou bien1 (si ya pas de retour).
    Car cette fonction je vais l'appeler dans le main, avec deux parametres
    et tester son retour.
    j'espere que tu m'a compris.
    Ou bien c moi qui t'a pas compris?
    Si c le cas ecrit moi sur le code stpp

  11. #11
    Membre confirmé Avatar de NizarK
    Inscrit en
    Mars 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 189
    Par défaut
    tu as dit :
    Si je la met dans le try{}, la fonction ne voit pas le "a" ,le compilateur me dit qu'il faut un retour pour cette fonction,
    je t'ai dit mets le dans le try{} et pour résoudre le problème

    le compilateur me dit qu'il faut un retour pour cette fonction
    il faut mettre des return 0 ou return -1 par exemple dans tous les catch comme ça le compilateur ne te sortira plus cette erreur. ET dans ce cas s'il ya une exception il te retournera 0 (ou -1 si tu veux )

    Donc pour résumer , le comportement de ta classe sera comme ceci :

    Si pas d'exception et le resultset est vide il te retourne 0

    si pas d'exception et le resultset n'est pas vide , il retourne 1.

    JE crois que tu dois te documenter plus sur le langage java et tout ce qui concerne les connexions aux bases de données comme ça tu seras plus à l'aise pour faire tes programmes

Discussions similaires

  1. [MySQL] Erreur de requête
    Par Sebe dans le forum PHP & Base de données
    Réponses: 45
    Dernier message: 08/02/2006, 15h09
  2. [PHP MySQL] Erreur execution requête de type INSERT
    Par Pfeffer dans le forum Requêtes
    Réponses: 6
    Dernier message: 23/01/2006, 18h38
  3. [Debutant]Erreur Récurent - Requête
    Par ghan77 dans le forum Bases de données
    Réponses: 19
    Dernier message: 10/01/2006, 14h09
  4. erreur exécution requête
    Par MANU_2 dans le forum Bases de données
    Réponses: 4
    Dernier message: 13/10/2005, 08h27
  5. Erreur de requête :-(
    Par pekka77 dans le forum ASP
    Réponses: 2
    Dernier message: 28/06/2005, 14h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo