2012-06-23 6 views
0

У меня есть этот код пропущен, который я использую для проверки ввода:Как сравнить строки и объект в Java

public void validaUserID(FacesContext context, UIComponent component, Object value) throws ValidatorException, SQLException { 

     int findAccount = 0; 

     if (ds == null) { 
      throw new SQLException("Can't get data source"); 
     } 
     // Initialize a connection to Oracle 
     Connection conn = ds.getConnection(); 

     if (conn == null) { 
      throw new SQLException("Can't get database connection"); 
     } 

     // Convert Object into String 
     int findValue = Integer.parseInt(value.toString()); 

     // With SQL statement get all settings and values 
     PreparedStatement ps = conn.prepareStatement("SELECT * from USERS where USERID = ?"); 
     ps.setInt(1, findValue); 
     try { 
      //get data from database   
      ResultSet result = ps.executeQuery(); 
      while (result.next()) { 
       // Put the the data from Oracle into Hash Map 
       findAccount = result.getInt("USERID"); 
      } 
     } finally { 
      ps.close(); 
      conn.close(); 
     } 

     // Compare the value from the user input and the Oracle data 
     if (value.equals(findAccount)) { 
      throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, 
        value + " Session ID is already in use!", null)); 
     } 
    } 

По какой-то причине, что входные данные не по сравнению с надлежащим значением в Oracle. Каков правильный способ сравнения двух значений?

+0

«Не сравнивается должным образом» - пожалуйста, напишите более подробно. Какой вклад вы использовали, и каково было в результате поведение? –

+0

У меня нет вывода. Правильный вывод должен быть «.. Идентификатор сеанса уже используется!» – user1285928

ответ

6

Похоже, вы сравниваете целые числа в штучной упаковке. Я развожу их (т. Е. Получаю их в примитивной форме) и делаю == вместо .equals.

+0

Да, это решает проблему. Спасибо! – user1285928

+0

@ user1285928, Рад, что это помогло, но прежде чем продолжить, обязательно сделайте тщательное тестирование! Удачи. – user1329572

1

Objects are compared using.equals(), and String is an object too, so they alsohave to be compared using .equals().

например:

Пусть s1 и s2 в строке.

s1.equals (s2);

Primitive variables are compared using==, обетрка являются объекты, вам нужно сравнить их с .equals(), but if you want to compare them using ==, , то вы должны сначала преобразовать их в первозданном виде.

например:

Integer а = 5;

int i = новое целое число (a);

1

Хорошо. Ответ лежит на самом коде.

if (value.equals(findAccount)) 

вы можете написать это вместо того, чтобы этот путь

if (findValue == findAccount)) 

как вы уже развернула свой объект Значение примитивного findValue.

Чтобы быть более понятным, equals() вызывается и передается только объектам. Вы не можете сравнивать объекты с примитивами или наоборот.