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

それなし

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

それは正常に動作し、データベースからユーザー名を出力していますが、それでエラーもスローされます。

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

3 に答える 3

8
Select Username from .....................

select句には 1 つの列しかありません。

次のようなものに変更します

  Select Username, yourpasswordcolumnname from......
于 2013-07-25T14:45:40.957 に答える
7

テーブルから 1 つの列のみを取得しています。

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

これを試して:

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

次に、コードが機能するはずです。別の関連する注意事項として、パスワードを「クリアテキスト」として保存しないでください。常に一方向の暗号化方法を使用し、ソルトを使用してください。

関連:パスワードを間違って保存している可能性があります

于 2013-07-25T14:45:56.520 に答える
2
select * from dbo.LoginDetails where Username = ? and Password =?

必要な情報が得られるので、現在のように、dbo.LoginDetails1 つの列だけではなく、すべての列を選択できます。Username

于 2013-07-25T14:46:33.587 に答える