2016-04-03 108 views
1

由於某種原因,此方法始終返回false。我輸入了正確的憑證並嘗試了,但是返回了錯誤的來電者。請幫忙。無法讓登錄應用程序正常工作

public Boolean validate(String username, String password) { 

    System.out.println(username); 
    System.out.println(password); 

    try { 

     Class.forName("com.mysql.jdbc.Driver"); 
     Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/login?"+"user=Naveen&password=Naveen"); 

     String sql = "select * from login.user where username=? and password=?"; 

     PreparedStatement pst = conn.prepareStatement(sql); 

     pst.setString(0, username); 
     pst.setString(1, password); 

     ResultSet rs = pst.executeQuery(); 

     if(rs.next()){ 
      return true; 
     }else{ 
      return false; 
     } 

    } catch (Exception e) { 
     return false; 
    } 
} 
+2

也請在你的catch塊,以獲得增加的System.out.println(E)實際錯誤。根據你的代碼無論你得到什麼錯誤它返回爲假,並沒有指出錯誤 – LearningPhase

+0

是的,我會這樣做,謝謝! –

回答

3

PreparedStatement開始與10的參數指標。正確的方法來設置參數是:

PreparedStatement pst = conn.prepareStatement(sql); 
pst.setString(1, username); 
pst.setString(2, password); 

我也建議使用try-與資源塊Closeable資源,如ConnectionPreparedStatement。或者至少在使用Java之前,至少在最後關閉它們。

0

根情況是您的代碼總是進入catch塊並返回false

您應該使用正確的索引PreparedStatement clasure。 第一次應該是1而不是0

注意:你也應該在處理正確的方式Exceptions(至少在控制檯打印錯誤消息,這將是有益的)