2013-07-25 81 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