2014-01-24 2 views
1

Я пытаюсь проверить, существует ли имя пользователя в таблице: База данных также имеет поле, заданное как уникальное Метод возвращает логическое сообщение, если имя пользователя уже существует или нет. Часть моего кода, который устанавливает имя пользователяExists var в true, никогда не запускается, даже если имена пользователей совпадают.Java SQL Проверьте, существует ли имя пользователя

public static boolean CheckUsernameExists(String username) 
{ 
    boolean usernameExists = false; 

    try 
    { 

     Class.forName("com.mysql.jdbc.Driver"); 
     Connection connection = DriverManager.getConnection(urlDB, usernameDB, passwordDB); 

     PreparedStatement st = connection.prepareStatement("select * from Members order by username desc"); 
     ResultSet r1=st.executeQuery(); 
     String usernameCounter; 
     if(r1.next()) 
     { 
      usernameCounter = r1.getString("username"); 
      if(usernameCounter == username) //this part does not happen even if it should 
      { 
       System.out.println("It already exists"); 
       usernameExists = true; 
      } 
     } 


    } 

    catch (SQLException e) 
    { 
     System.out.println("SQL Exception: "+ e.toString()); 
    } 
    catch (ClassNotFoundException cE) 
    { 
     System.out.println("Class Not Found Exception: "+ cE.toString()); 
    } 

return usernameExists; 
} 

ЕСЛИ вы можете помочь, так или иначе, я был бы благодарен!

+3

Снова и снова ... –

+0

вы можете просто запросить это конкретное имя пользователя, и если что-нибудь вообще будет возвращено, то оно есть. в противном случае вы получите мягкий сбой, а не набор результатов и/или пустой набор результатов. – SnakeDoc

+0

это должно быть отмечено как дублирующее и закрытое – user1428716

ответ

2

Использовать if(usernameCounter.equals(username)). Сравнение строк сложнее. Это подробно обсуждалось here.

0

Ваша проблема usernameCounter == имя пользователя. Вы сравниваете объекты, вместо этого я думаю, что вы хотите сравнивать строки.

попробовать usernamecounter.equals (имя пользователя)

0

Никогда сравнения двух String экземпляров с помощью ==, используйте equals() (== проверки идентичности, а не равенство).

Вы также можете напрямую использовать имя пользователя в запросе, а не принимая имя пользователя из результата запроса:

PreparedStatement st = connection.prepareStatement("select * from Members where username = ?"); 
st.setString(1, username); 
ResultSet r1=st.executeQuery(); 
if(r1.next()) { 
    usernameExists = true; 
} 
2

Как каждый указывал, что вам нужно использовать .equals если сравнивать строки. однако для вашего использования я бы рекомендовал использовать .equalsIgnoreCase, поскольку вы, вероятно, хотите, чтобы он обрабатывал «MSmith» и «msmith» как то же самое.

Кроме того, гораздо более эффективный способ выполнения этой проверки будет выбрать строку, на столе

PreparedStatement st = connection.prepareStatement("select * from Members username=?"); 
st.setString(1,username); 

Затем, если вы получите строку, вы знаете имя пользователя уже используется. Если вы не получите строку или вы получаете исключение RowNotFoundException, вы можете рассматривать это как «имя пользователя не использовалось». Опять же, вам нужно быть осторожным со случаем ввода при выполнении проверки.

Смежные вопросы