Система входа в netbeans

#java #netbeans #logging

#java #netbeans #ведение журнала

Вопрос:

Я хочу создать систему входа в систему с базой данных MS Access. данные для входа находятся в базе данных.

Существует возможность работы онлайн, затем вы заполняете данные для входа. И нажмите OK, чтобы перейти к следующему экрану.

И возможность работы в автономном режиме, затем вы указываете «студент» в имени пользователя (оставьте пароль пустым) и нажимаете OK, чтобы перейти к следующему экрану.

Должна быть указана ошибка, если учетные данные неверны, но не должно быть ошибки, когда заполняется только «студент»

Теперь проблема в том, что она выдает ошибку, поскольку здесь введен «студент», но он не должен выдавать ошибку. Только когда данные для входа неверны. Как мне это исправить?

Код:

 /**Local*/
    try {
         String idnr = GebruikersnaamTekst.getText().trim();
         if (idnr.matches("Cursist")) {
        BasisScherm b = new BasisScherm();
            b.setVisible(true);
            setVisible(false);   
        }
    } catch (Exception e) {
    }

/**Internet*/
  try

   {

    String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
    Class.forName(driver);

    String db = "jdbc:odbc:db1";
    con = DriverManager.getConnection(db);
    st = con.createStatement();

    }
    catch(Exception e)
    {

  }

   try
        {

        String idnr = GebruikersnaamTekst.getText().trim();
        String pass = Password.getText().trim();

        String sql = "select idnr,pass from Table1 where idnr='" idnr "'and pass='" pass "'";
        rs = st.executeQuery(sql);

           int count = 0;
        while(rs.next())
        {
            count = count   1;
        }

          if (count == 1) {
        BasisScherm b = new BasisScherm();
            b.setVisible(true);
            setVisible(false);   
        }

        else 
        {
            JOptionPane.showMessageDialog(null, "Gebruiker niet gevonden!");
        }

        }
        catch(Exception ex )
        { 
        }




}  
  

Комментарии:

1. Мы не можем сказать вам, не видя кода…

2. Не могли бы мы посмотреть часть кода, над которым вы работаете? Это немного поможет с ответом.

3. Я сомневаюсь, что кто-нибудь поможет вам, не просмотрев сначала какой-нибудь код!

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

Ответ №1:

Вы надеетесь, что она будет успешной, если вы правильно подберете «Студент», верно?

Возможно, проблема в чувствительности к регистру, попробуйте это.

 if (idnr.toLowerCase().matches("cursist"))
  

Это будет оценивать true и не учитывать регистр.

Также, что касается потока выполнения программы, если они находятся в одном классе или функции main (), она будет выполнять Интернет независимо от локального результата, что также может привести к ошибкам.

Возможно, создайте глобальную логическую переменную. Чтобы подтвердить, что вы выполнили проверку учащегося / Полный код:

 /**Local*/
boolean isStudent = false;
    try {
         String idnr = GebruikersnaamTekst.getText().trim();
         if (idnr.matches("Cursist")) {
        BasisScherm b = new BasisScherm();
            b.setVisible(true);
            setVisible(false);   
            isStudent=true;
        }
    } catch (Exception e) {
    }
if(!isStudent)
{
/**Internet*/
  try

   {

    String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
    Class.forName(driver);

    String db = "jdbc:odbc:db1";
    con = DriverManager.getConnection(db);
    st = con.createStatement();

    }
    catch(Exception e)
    {

  }

   try
        {

        String idnr = GebruikersnaamTekst.getText().trim();
        String pass = Password.getText().trim();

        String sql = "select idnr,pass from Table1 where idnr='" idnr "'and pass='" pass "'";
        rs = st.executeQuery(sql);

           int count = 0;
        while(rs.next())
        {
            count = count   1;
        }

          if (count == 1) {
        BasisScherm b = new BasisScherm();
            b.setVisible(true);
            setVisible(false);   
        }

        else 
        {
            JOptionPane.showMessageDialog(null, "Gebruiker niet gevonden!");
        }

        }
        catch(Exception ex )
        { 
        }

}  }//end if
  

Комментарии:

1. GebruikersnaamTekst — это JJtekstfield, и если это соответствует «cursist», и вы нажмете на кнопку ok, он перейдет к следующему экрану. Но оператор else «Gebruiker niet gevonden» не должен отображаться, когда данные правильно заполнены в en, когда заполнен «cursist»

2. Правильно, я думаю, я понимаю логику. Что я вижу, так это то, что она добавит кнопку, а затем независимо выполнит вызов SQL, следовательно, также выведет ошибку. Я добавлю больше к ответу…

3. Извините, у меня еще один вопрос, возможно ли, когда «Student» заполняется в GebruikersnaamTekst (текстовое поле), отключить поле пароля, чтобы вы не могли ничего в него вставить?

4. В каком окне это работает? Я немного неопытен в построении пользовательского интерфейса Java, но я бы подумал, что вы могли бы добавить обработчик событий в GebruikersnaamTekst, чтобы сделать Password.set видимым(false),

5. Теперь код выглядит так: попробуйте { String idnr = GebruikersnaamTekst.getText(); if (idnr.matches(«Cursist»)) { Password.setEditable(false); } else { Password.setEditable(true); } } catch (исключение e) { } но не сработало, редактировать не нужно, только когда GebruikersnaamTekst является «student»