2016-10-22 6 views
0

В настоящее время я пытаюсь создать систему входа в систему Java и SQL и в настоящее время получаю сообщение об ошибке.Ошибка при проверке имени пользователя и пароля

PreparedStatement s1 = con.prepareStatement("SELECT * FROM dbo.Logins WHERE Username=? AND Password=?"); 
s1.setString(1,loginUsername); 
s1.setString(2, loginPassword.toString()); 
ResultSet rs = s1.executeQuery(); 

if(rs.next()){ 
    JOptionPane.showMessageDialog(null, "User Found"); 
} 
else{ 
    JOptionPane.showMessageDialog(null, "Error"); 
} 

Когда я запускаю этот фрагмент кода всегда отображает еще часть, если/еще и им не уверен, почему. Заранее спасибо.

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

+0

это не просто означает не соответствует найдено, вы уверены, что данные сохранены в БД –

+0

Я могу напечатать таблицу на консоли, так что, безусловно, сохранен. – jaayvazian

+0

Почему вы используете 'loginUsername' напрямую, но' loginPassword.toString() ', а не' loginPassword' напрямую? –

ответ

0

Вы должны попытаться использовать while(rs.next()) вместо if(rs.next()).

Если это не сработает, будет ли ваша БД (которую вы упомянули заполнены), укажите те конкретные значения имени пользователя и пароля, которые вы ищете? Если нет, это может быть проблемой.

Если это тоже не сработает, возможно, вы закрыли некоторые объекты (например, s1.close() или con.close()), где вы не должны. Для дальнейшей помощи в этом вам нужно будет предоставить более подробный поток того, что вы сделали во всем коде.

+0

добавил while (rs.next()) вокруг оператора if, и теперь ни один всплывающий не появляется , Я поместил его в неправильном месте или это другая ошибка. – jaayvazian

+0

попробуйте использовать while, а вместо if() –

+0

попробовал цикл while, ничего не получил, и в базе данных содержится имя входа в систему im. – jaayvazian

0

Вы можете получить количество строк, доступных в таблице для данного запроса, и если оно отлично, чем 0, оно выполнит оператор User Found.

PreparedStatement s1 = con.prepareStatement("SELECT * FROM dbo.Logins WHERE Username=? AND Password=?"); 
s1.setString(1,loginUsername); 
s1.setString(2, loginPassword.toString()); 
ResultSet rs = s1.executeQuery(); 

int rowCount = rs.last() ? rs.getRow() : 0; //Number of rows available in table for query 

if(rowCount>0) 
    JOptionPane.showMessageDialog(null, "User Found"); 
} 
else{ 
    JOptionPane.showMessageDialog(null, "Error"); 
} 
+0

Можете ли вы объяснить, что вы здесь изменили, и почему? Ответ не очень полезен без каких-либо сопроводительных описаний. – nbrooks

+0

@nbrooks обновил мой ответ. rs.next() всегда возвращает «select ...». Вопрос в том, больше ли число больше нуля. Итак, для этого я использовал rowCount. – Rishi

+0

получил это com.microsoft.sqlserver.jdbc.SQLServerException: запрошенная операция не поддерживается только для наборов результатов только вперед. – jaayvazian

0
public void Login(String user, String pass) throws ClassNotFoundException, SQLException{ 
     try{ 
      Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
      MainWindow mw = new MainWindow(); 
      String userName = "<USERNAME>"; 
      String password = "<PASSWORD>"; 
      String url = "<URL>"; 
      Connection con = DriverManager.getConnection(url, userName, password); 
      PreparedStatement s1 = con.prepareStatement("SELECT * FROM dbo.Logins WHERE Username=? AND Password=?"); 
      s1.setString(1,user); 
      s1.setString(2, pass); 
      ResultSet rs = s1.executeQuery();   

      //int rowCount = rs.last() ? rs.getRow() : 0; //Number of rows 
      System.out.println("Name: " + user + "\nPass: " + pass); 

      if(rs.next()) 
       JOptionPane.showMessageDialog(null, "User Found"); 

      else{ 
       JOptionPane.showMessageDialog(null, "Error"); 
      } 
      con.close(); 
Смежные вопросы