2016-07-03 3 views
-1

Je reçois une erreur de syntaxe avec le code SQL dans une instruction préparée. J'ai lu les autres réponses sur le site et je ne peux pas résoudre le problème. Mon code est le suivantJava Mysql Problème de syntaxe d'instruction préparée

 private boolean validate_login(String username,String password) { 
    try{   
     Class.forName("com.mysql.jdbc.Driver"); // MySQL database connection 
     String url = "jdbc:mysql://localhost/db_webstore"; 
     String user = "root"; 
     String pw = "Password"; 




     String SQL = "select * from tbl-users where Tbl-UsersUserName=? and Tbl-UsersPassword=?"; 


     Connection conn = DriverManager.getConnection(url, user, pw); 
     PreparedStatement pst; 
     pst = conn.prepareStatement(SQL); 
     pst.setString(1, username); 
     pst.setString(2, password); 
     ResultSet rs = pst.executeQuery();       

     if(rs.next())    
      return true;  
     else 
      return false;    
    } 
    catch(Exception e){ 
     e.printStackTrace(); 
     return false; 
    }  


    }  

Le message d'erreur est le suivant

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près des '-users où Tbl-UsersYou avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de '-users où Tbl-Users

Quelqu'un peut-il offrir quelques conseils? Merci à l'avance

+0

Pouvons-nous avoir une structure TBL utilisateurs? – Malinga

+1

est tbl-users nom de table valide? –

+0

@anaspa Ne semble pas être valide: http://dev.mysql.com/doc/refman/5.7/fr/identifiers.html – Tom

Répondre

1

Il vous manque probablement quelques points dans votre requête. Le nom de la table et de la colonne doit être séparé par un point. De plus, le nom de la table doit être cité comme - ne sont pas autorisés dans les identifiants sans guillemets (voir here):

String SQL = "select * from `Tbl-Users`" 
     + " where `Tbl-Users`.UserName=?" 
     + " and `Tbl-Users`.Password=?"; 

MISE À JOUR:

  • Ajout d'un lien vers MySQL docu sur les identifiants valides
  • Nom de la table citée en utilisant `
0

vous devez inclure le numéro de port (qui est 3306 pour MySQL) dans votre base de données de connexion

en conséquence votre code doit être corrigé comme suit

private boolean validate_login(String username,String password) { 
    try{   
     Class.forName("com.mysql.jdbc.Driver"); // MySQL database connection 
     String url = "jdbc:mysql://localhost:3306/db_webstore"; 
     String user = "root"; 
     String pw = "Password"; 




     String SQL = "select * from tbl-users where Tbl-UsersUserName=? and Tbl-UsersPassword=?"; 


     Connection conn = DriverManager.getConnection(url, user, pw); 
     PreparedStatement pst; 
     pst = conn.prepareStatement(SQL); 
     pst.setString(1, username); 
     pst.setString(2, password); 
     ResultSet rs = pst.executeQuery();       

     if(rs.next())    
      return true;  
     else 
      return false;    
    } 
    catch(Exception e){ 
     e.printStackTrace(); 
     return false; 
    }  


    }