Почему моя программа не проверяет данные в строках, отличных от первого в MySQL до Java? - PullRequest
1 голос
/ 24 марта 2020

Информация:


MySQL Workbench 8.0 CE

Eclipse IDE для JAVA разработчиков 2020-03

Имя базы данных: база данных

Имя таблицы: данные


Я пытаюсь создать программу Java, которая будет подключаться к базе данных MySQL и действовать как форма входа в систему. Существует проблема, заключающаяся в том, что программа может проверять только первые или последние строки случайным образом и не может проверять строки между ними. Всего для начала 4 строки. Вот мой код:

Соединение Connection объявляется в конструкторе и получает соединение через другой класс, который его возвращает.

public void actionPerformed(ActionEvent e) {
    try
    {
        Statement st=conn.createStatement();
        ResultSet rs=st.executeQuery("select * from data");
        while(rs.next())
        {
            String usnm=rs.getString("username");
            String pswd=rs.getString("password");
            String mo=rs.getString("ph.no.");
            if(usnmf.getText().equals(usnm)&&pswdf.getText().equals(pswd))
            {
                flag=1;
                break;
            }
            if(usnmf.getText().equals(mo)&&pswdf.getText().equals(pswd))
            {
                flag=2;
                break;
            }
            if(!usnmf.getText().equals(usnm)&&!pswdf.getText().equals(pswd)||!usnmf.getText().equals(mo)&&!pswdf.getText().equals(pswd))
            {
                flag=0;
                break;
            }
        }


    }
    catch(Exception ex)
    {
        JOptionPane.showMessageDialog(null, "Error :"+ex);
    }
    if(flag==1)
    {
        try
        {
            PreparedStatement pst=conn.prepareStatement(sql1);
            pst.setString(1, usnmf.getText());

            ResultSet rs=pst.executeQuery();

            if(rs.next())
            {
                name=rs.getString("name");
            }
            JOptionPane.showMessageDialog(null, "Login Successful... Welcome "+name);
        }
        catch(Exception ex)
        {
            JOptionPane.showMessageDialog(null, "Error: "+ex);
        }

    }
    else if(flag==2)
    {

    }
    else if(flag==0)
        JOptionPane.showMessageDialog(null, "Invalid Login Info.");

Здесь usnmf и pswdf являются текстовыми полями имени пользователя и пароля соответственно. Предполагается, что поле имени пользователя будет действовать как поле для имен пользователей и телефонных номеров, которые находятся в отдельных столбцах. Практически тип данных поля номера телефона varchar, и пароль проверяется без хеширования. Это только для начала. Но когда я ввожу правильные данные для любого поля, программа показывает неверные данные для входа в систему, если только данные не принадлежат первой или последней строке. К сожалению, это тоже случайно. Иногда правильные данные отображаются только в первой строке, а иногда только в последней строке.

Есть ли ошибка в моем коде? Пожалуйста, помогите мне, потому что после тщательной перепроверки снова и снова, я очень расстроен.

1 Ответ

1 голос
/ 24 марта 2020

Извините за серьезную глупость, но решение было просто удалить форму break , где использовалось условие not (!). Если программа не нашла совпадения в первой строке, то l oop был сломан и было отображено неверное информационное сообщение.

...