2016-07-03 1 views
-1

プリペアドステートメント内のSQLコードで構文エラーが発生します。私はサイト上の他の回答を読んだので問題を解決することはできません。次のように私のコードですJava Mysqlプリペアドステートメント構文の問題

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


    }  

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorExceptionを次のようにエラーメッセージがある:あなたのSQL構文でエラーが発生しています。適切な構文についてはMySQLサーバのバージョンに対応するマニュアルを参照して、 '-users'の近くで使用してください。ここで、Tbl-UsersはSQL構文にエラーがあります。あなたのMySQLサーバのバージョンに対応するマニュアルをチェックして、正しい構文が使えるようにしてください。ここで、Tbl-Usersはどこですか?

誰かが助言を提供できますか?ありがとうございました

+0

たちはTBL-ユーザーの構造を持つことができ、次のようにコードを修正する必要がある?それに応じてデータベース接続

に(MySQL3306ある)ポート番号を含める必要がありますか – Malinga

+1

はtbl-usersの有効なテーブル名ですか? –

+0

@anaspa有効であるとは思われません:http://dev.mysql.com/doc/refman/5.7/en/identifiers.html – Tom

答えて

1

あなたの疑問にお答えします!表と列の名前はドットで区切る必要があります。さらに、テーブル名は、(hereを参照)引用符で囲まれていない識別子では許可されていません-として引用する必要があります

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

UPDATE

  • 有効な識別子
  • を上のMySQLのドキュメンタリーに追加リンク
  • 表名に「
  • 」を使用します。
0

あなたが

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


    }