Улучшение функции входа в систему и решение проблемы с зацикливанием

Я новичок. Пытаюсь выполнить демонстрацию извлечения базы данных для входа в систему, вот мой код функции:

Я вызову функцию goLogin и передам входной идентификатор и пароль для проверки, а также получу все идентификаторы из базы данных для проверки. После того, как ID верен, только проверьте пароль.

public void goLogin(String id, String pass){

String[99] allID = getAllIDFromDB();    

for(int i=0;i<allID.length;i++){

   if (allID[i]==id){

    String passwordDB = getPasswordFromDB(id);

    if (pass==password){
           System.out.println("Correct Password");
    }else{
           System.out.println("Wrong Password");
    }


   }

}

Мои коллеги говорят, что я использовал слишком много, если еще, и я могу сократить код и улучшить программу, и я столкнулся с некоторыми проблемами при зацикливании, например, когда идентификатор и пароль верны, программа все равно продолжит цикл.

Есть ли предложения по улучшению этой функции?

Возможный дубликат Как сравнить строки в Java?

Guy 15.03.2018 12:56
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
50
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Прежде всего, зачем извлекать все идентификаторы пользователей из базы данных, а не делать sql-запрос для получения строки этого пользователя на основе этого идентификатора.

что-то вроде этого:

Select * from `users` where id = {id};

И если вы хотите прекратить зацикливаться, был обнаружен неправильный пароль, добавьте break в область else.

Да, вы даже могли:

Select * from `users` where id = {id} and password = {password}

Кроме того, для сравнения String в Java следует использовать string1.equals(string2), а не оператор ==.

Ответ принят как подходящий

На мой взгляд, основная проблема вашей программы - это ваша логика для реализации функции входа в систему.

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

Фактически, эту базовую проверку можно выполнить в запросе к базе данных. Вы можете просто взять введенный пользователем идентификатор и пароль и позволить запросу к базе данных выполнить фильтрацию и определить, являются ли введенные пользователем идентификатор и пароль действительными или недействительными.

Сначала используйте этот запрос:

Select DATABASEID From Database Where DATABASEID=inputID and DATABASEPASSWORD=inputPassword;

Код Java:

public void goLogin(String id, String pass){

// Since i changed the Query, you need to pass in the ID and Password to let the Query to filtering

String DatabaseID = getIDFromDB(id, pass);    

   // Simple Logic, If DatabaseID have value which mean the ID and Password is correct
   // Because the Database Query will return null if the ID and Password is Wrong

   if (DatabaseID!=null){
     System.out.println("ID and Password is Correct.");   
   }else{
     System.out.println("ID or Password is Incorrect.");
   }

}

Эта логика очень проста, но также имеет некоторый недостаток, единственное сравнение преимуществ с вашим кодом:

  1. По-прежнему может выполнять базовую проверку идентификатора ввода пользователя и пароля.
  2. Удалите for loop и прочие ненужные if else.
  3. Доступ к базе данных только один раз.

Надеюсь, это поможет.

Другие вопросы по теме