0

入力検証に使用するこのコードを切り取っています。

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の値と適切に比較されません。2つの値を比較する適切な方法は何ですか?

4

3 に答える 3

6

ボックス化された整数を比較しているようです。私はそれらをアンラップし(つまり、プリミティブ形式で取得し)、==の代わりに実行し.equalsます。

于 2012-06-23T15:50:10.340 に答える
1

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

例えば:

s1とs2を文字列と仮定します。

s1.equals(s2);

Primitive variables are compared using ==ラッパーはオブジェクトであるため、それらを.equals()と比較する必要があります。次にbut if you want to compare them using ==最初にそれらをプリミティブ形式に変換する必要があります。

例えば:

整数a=5;

int i = new Integer(a);

于 2012-06-23T16:03:40.070 に答える
1

上手。答えはあなたのコード自体にあります。

 if (value.equals(findAccount)) 

代わりにこのように書くことができます

  if (findValue == findAccount)) 

オブジェクトをプリミティブfindValueに既にアンラップしているため。

より明確にするために、equals()が呼び出され、オブジェクトのみに渡されます。オブジェクトをプリミティブと比較したり、その逆を行ったりすることはできません。

于 2012-06-23T16:32:10.630 に答える