2013-11-19 3 views
0

Я хочу, чтобы ошибка отображалась неверно. Имя пользователя & пароль после сравнения введенных имени пользователя и пароля с базой данных пользователей в java.Проверьте имя пользователя и пароль в java DataBase и сообщите неверное сообщение о пароле, если false

проблема заключается в том, что инструкция if else соответствует каждой строке, пока она не попадет в правую строку b4, отображая «имя пользователя и пароль правильно», но я хочу, чтобы он проверял всех, а если он не существует, Пожалуйста, проверьте имя пользователя и пароль «

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

вот мой код с комментариями

public void displayUsers(String f, String s) { 
     try { 
      String queryString = "SELECT SName, SPwd FROM staff"; 
      ResultSet results = Statement.executeQuery(queryString); 

      while (results.next()) { 
      String staffname = results.getString("snameeee"); 
      String password = results.getString("SPwd"); 

       if ((f.equals(staffname)) && (s.equals(password))) { 

        JOptionPane.showMessageDialog(null, "Username and Password exist"); 
      }else { 

      //JOptionPane.showMessageDialog(null, "Please Check Username and Password "); 
      } 
      results.close(); 
     } catch (SQLException sql) { 

      out.println(sql); 
     } 
+3

Хороший господин. ** Не ** хранить пароли в текстовом виде. http://stackoverflow.com/search?q=database+password –

+0

Да, я знаю, но его просто демонстрационный проект не заботится о шифровании паролей. Теперь спасибо за обновление –

ответ

0

Во-первых, не храните пароль в виде обычного текста. Во-вторых, загрузка всех записей - это очень неправильный подход к выполнению кода выше.

public void displayUsers(String f, String s) { 
    try { 
     String queryString = "SELECT * FROM staff where SName=? and SPwd=?"; 
     //set this values using PreparedStatement 
     ResultSet results = ps.executeQuery(queryString); //where ps is Object of PreparedStatement 

     if(!results.next()) { 

       JOptionPane.showMessageDialog("Wrong Username and Password."); 
     } 

    } catch (SQLException sql) { 

     out.println(sql); 
    }finally{ 
     //closing ResultSet,PreparedStatement and Connection object 
    } 
+0

dnt понять ваш код..что я хочу достичь, это неправильное имя пользователя или пароль, когда введенное имя пользователя или пароль не существует в базе данных –

+0

Проверьте последнее. –

+0

спасибо большое ... теперь я понимаю это –

3

Нет, что вы делаете неправильно.

Загрузка всех записей не является хорошей практикой для проверки учетных данных.

Пасс username параметр в ваш запрос и регистрация в базе данных.

1) Если пользователя нет, скажите username не существует.

2) Если пользователь существует, то проверить password из с существовавшим пользователем базы данных password.

+0

и следите за SQL-инъекцией – JoeC

+0

Могу ли я кодировать для этого? – Manikandan

0

с помощью флага вы можете легко решить эту проблему. как это ..

public void displayUsers(String f, String s) { 
    boolean flag = false; 
    try { 
     String queryString = "SELECT SName, SPwd FROM staff"; 
     ResultSet results = Statement.executeQuery(queryString); 

     while (results.next()) { 
     String staffname = results.getString("SName"); 
     String password = results.getString("SPwd"); 

      if ((f.equals(staffname)) && (s.equals(password))) { 
       flag = true; 
       JOptionPane.showMessageDialog(null, "Username and Password exist"); 
     } 
     results.close(); 
     if(!flag){ 
       JOptionPane.showMessageDialog(null, "Please Check Username and Password "); 
     } 
    } catch (SQLException sql) { 

     out.println(sql); 
    } 
0

Вы можете использовать:

boolean exist = false; 
    String queryString = "SELECT SName, SPwd FROM staff"; 
    ResultSet results = Statement.executeQuery(queryString); 
    while (results.next()) { 
    String staffname = results.getString("SName"); 
    String password = results.getString("SPwd"); 

     if ((f.equals(staffname)) && (s.equals(password))) { 
      exist = true; 
      JOptionPane.showMessageDialog(null, "Username and Password exist"); 
     } 
    } 
    results.close(); 
    if(!exist){ 
      JOptionPane.showMessageDialog(null, "Please Check Username and Password "); 
    } 

Но вы должны использовать это:

String queryString = "SELECT SName, SPwd FROM staff where SName=? and SPwd=?"; 
    ps = con.prepareStatement(queryString); 
    ps.setString(1,f); 
    ps.setString(2,s); 
    ResultSet results = ps.executeQuery(); 

    if (results.next()) { 
     JOptionPane.showMessageDialog(null, "Username and Password exist"); 
    }else{ 
     JOptionPane.showMessageDialog(null, "Please Check Username and Password "); 
    } 
    results.close(); 
    con.close(); 
+0

, если правильное имя пользователя и пароль находятся в строке 3 else результат дается 2wice перед следующим результатом, который является правильным, что является моей главной проблемой. –

+0

Извините, в моем кодовом недостатке конец if. Я редактирую его. Но я рекомендую вам использовать второе решение. – maiklahoz

0
 String queryString =" select count(*) as \"exists\" from credit where username=? and password=?"; 
     //set this values using PreparedStatement 
     ps = con.prepareStatement(queryString); 
     ps.setString(1,f); 
     ps.setString(2,s); 
     ResultSet results = ps.executeQuery(); 

     if (results.next()) { 
       int i = results.getInt("exists"); 
      if(i==1) 
      { 
       JOptionPane.showMessageDialog(null, "Username and Password exist"); 
      } 
      else{ 
       JOptionPane.showMessageDialog(null, "Please Check Username and Password "); 
      }