0

mySQL データベースに接続されたログイン ページで作業していると、「ユーザー名またはパスワードが正しくありません」という警告が表示され続けます。

取得しているすべての値を出力しましたが、どこが間違っているのかわかりません。

私のテーブルは、bcsapril がテーブルの最初のエントリになるように設定されており、テキストフィールドのユーザー名がデータベースから取得した値と等しくないことが出力されます。if(rs2.next()) を while(rs2.next()) に変更しようとしました

次のフレームが表示されましたが、データベース内のエントリ数と同じ回数「正しくない」メッセージが表示されました。

私の唯一の質問は、「bcsapril」が常に私のコードが取得しているユーザー名である理由です。どんな助けでも素晴らしいでしょう。

if(evt.getKeyCode() == KeyEvent.VK_ENTER){
  String user = userTx.getText();
  String pwd = new String (passTx.getPassword());
  String sql = "SELECT * FROM accounts";
  boolean loggedIn = false;

  try{
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/dardb","root","1234");
            PreparedStatement stmt = con.prepareStatement(sql);
            ResultSet rs2 = stmt.executeQuery(sql);
        while(rs2.next()) {
            String uname = rs2.getString("username");
            String password = rs2.getString("password");
                if((user.equals(uname)) && (pwd.equals(password))){
                    loggedIn = true;
                }
        }

        if(loggedIn){
             DarDBMainFrame x = new DarDBMainFrame();
                    x.setVisible(true); 
                    java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
                    setBounds(0,0,screenSize.width, screenSize.height);
                    setVisible(true);
                    x.setUsername(user);
                    pack();      
                    setUser(user);
                    dispose();
        }else{
                    JOptionPane.showMessageDialog(this, "Incorrect Username or Password!", "Login Error", JOptionPane.ERROR_MESSAGE);
                    System.out.println(user);
                    System.out.println(pwd);
             } 
    }catch (ClassNotFoundException | SQLException | HeadlessException e){
        JOptionPane.showMessageDialog(this, e.getMessage());
    }
    } 
4

3 に答える 3

0

Accountsテーブルからすべてのレコードを取得しているためではありwhile(rs2.next)ません。if(rs2.next)

SQL ステートメントで where句を指定していた場合は、 If条件で問題ありません。

于 2013-04-23T03:11:24.090 に答える
0

@Raviの回答に続いて、ループする必要がある場合は、次のことをお勧めします(明確にするために余分なコードを削除しました):

boolean loggedIn = false;

while(rs2.next()) {
    if((user.equals(uname)) && (pwd.equals(password))){
        loggedIn = true;
        break;
    }
}

if (!loggedIn) {
    JOptionPane.showMessageDialog(this, "Incorrect Username or Password!", "Login Error", JOptionPane.ERROR_MESSAGE);
}
于 2013-04-23T03:29:50.713 に答える