2012-06-23 43 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

我沒有得到任何輸出。正確的輸出應該是「..會話ID已經在使用!」 – 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 ==則必須首先將其轉換成其原始形式。

例如:

整數= 5;

int i = new Integer(a);

1

好吧。答案在於你的代碼本身。

if (value.equals(findAccount)) 

你可以寫它,而不是這樣

if (findValue == findAccount)) 

因爲你已經解開你的對象價值到原始findValue

爲了更清楚起見,調用equals()並僅將其傳遞給對象。您無法將對象與基元進行比較,反之亦然。