2013-07-25 106 views
1
PreparedStatement preparedStatement = Connectionstring().prepareStatement(
      "Select Username from dbo.LoginDetails where Username = ? and Password =?"); 
    String User = tf_Fname.getText(); 
    String _Pass = new String(tf_Lname.getPassword()); 
     preparedStatement.setString(1, User); 
     preparedStatement.setString(2, _Pass); 
     ResultSet resultSet = preparedStatement.executeQuery(); 
     while (resultSet.next()) 
     { 
      System.out.println("Username is "+ resultSet.getString(1)+"Password is "+resultSet.getString(2)); 
     } 

沒有該指數2超出範圍

+"Password is "+resultSet.getString(2) 

它工作得很好,它從數據庫 打印的用戶名但它也拋出一個錯誤。

com.microsoft.sqlserver.jdbc.SQLServerException: The index 2 is out of range. 
+3

是不是你只需選擇用戶名?如果您只從數據庫中選擇一個項目,怎麼會有兩件事情? – sunrize920

+0

+1感謝您的建議。 – anuj

回答

7
Select Username from ..................... 

你有select條款只有一列。

它更改爲類似

Select Username, yourpasswordcolumnname from...... 
+0

很快! –

+0

非常感謝.... :) – anuj

+0

@anuj你只能接受一個!回答... – jsedano

7

您只能從表中檢索一米欄:

"Select Username from dbo.LoginDetails where Username = ? and Password =?"); 

試試這個:

"Select Username, Password from dbo.LoginDetails where Username = ? and Password =?"); 

那麼你的代碼應該工作,上另一個相關的說明,從不將密碼存儲爲「明文」,始終使用單向加密方法,並使用鹽!

相關:You're Probably Storing Passwords Incorrectly

+0

我在哪裏把加密放在我的代碼中? – anuj

+0

好吧,我必須這樣做,當創建一個新用戶,並在選擇用戶名,密碼時在這裏選擇它....我認爲我現在瞭解了一下。讓我們看看它是否工作:) – anuj

+1

不要ecrypt密碼,哈希他們(與pbkdf2,bcrypt,scrypt或類似的) –

2
select * from dbo.LoginDetails where Username = ? and Password =? 

會得到你需要讓你從dbo.LoginDetails,而不是隻在一欄中,選擇Username所有列的信息,如你現在

+0

+1,你首先得到它! – NINCOMPOOP

+0

@TheNewIdiot感謝您注意! – sunrize920