Ошибка входа в Java

0

Я новичок в java-программе. Я создал java-программу с интерфейсом входа в систему, используя eclipse и MYSQL. как только я вхожу в систему, повторяя его успешно, 2 или 3 раза. и его открытие в 2 раза больше основного интерфейса. вот мой код. глядя на решение.

JButton btnLogin = new JButton("Login");
    btnLogin.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {

            try {

                String query = "select * from xyzlibrary.user_account";

                Statement st = con.createStatement();
                ResultSet rs=st.executeQuery(query);

                while (rs.next()) {

                    String username= rs.getString(1);
                    String password= rs.getString(2);

                    if (tfusername.getText().equals(username) && tfpasswordField.getText().equals(password)) {

                        JOptionPane.showMessageDialog(null, "Login successfull!");

                        Admin ad = new Admin();
                        ad.setVisible(true);

                        dispose();

                    }else

                        JOptionPane.showMessageDialog(null, "Incorrect User ID or Password!");


                }


            } catch (Exception e) {
                // TODO: handle exception
            }

        }
    });
    btnLogin.setBounds(125, 187, 89, 23);
    contentPane.add(btnLogin);
Теги:

4 ответа

2

Добавьте предложение where в ваш query потому что вы получите все строки из своей таблицы пользователя. Тогда из - за в while циклы вы получаете 2,3 или больше сообщений и окна, в зависимости от количества строк.

0

Сообщение "login successful" будет напечатано столько раз, сколько результатов в вашем запросе. Поэтому, если у вас есть 2 имени пользователя, он будет печататься 2 раза.

Почему бы не переместить печать из цикла while? Таким образом, он будет печататься только один раз независимо от того, сколько результатов вы получите.

0

Еще одна вещь, которую вы можете сделать, это добавить оператор возврата после распечатки принятого входа. Это решит вашу непосредственную проблему. Но в долгосрочной перспективе я предлагаю вам добавить предложение SQL WHERE в оператор SQL Select

0

Гораздо проще выбрать только соответствующие записи вашей таблицы, путем фильтрации полей имени пользователя и пароля на уровне запросов.

Также используйте PreparedStatement который будет следить за тем, чтобы избежать ваших значений и предотвратить SQL-инъекцию.

В приведенном ниже примере предполагается, что соответствующие столбцы в вашей таблице называются username и password, просто измените их на фактические имена ваших столбцов.

// just change the column names to fit your table columns
String query = "SELECT username from xyzlibrary.user_account WHERE username = ? AND password = ?";

// create a PreparedStatement which will escape values correctly
PreparedStatement st = con.prepareStatement(query);

// replace values
st.setString(1,tfusername.getText());
st.setString(2,tfpasswordField.getText());

ResultSet rs=st.executeQuery();

// if the result is not empty, the login is a success
if(rs.next()){

    JOptionPane.showMessageDialog(null, "Login successfull!");

    Admin ad = new Admin();
    ad.setVisible(true);

    dispose();

}
else{

    JOptionPane.showMessageDialog(null, "Incorrect User ID or Password!");

}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню