1

我在使用 NULL 作为整数参数时遇到问题。

我有 3 个相互扩展的类:

//1st
public class StandardTableIntId {
    ...

    protected MethodAnswer changeField(String field, Integer value) {
    DBConnection dbc = new DBConnection();
    Connection con = dbc.getConnection();
    try {
        PreparedStatement st = con.prepareStatement("UPDATE " + this.tableName + " SET " + field + " = ? WHERE id = ?");
        st.setInt(1, value);
        st.setInt(2, this.id);
        st.executeUpdate();
        return MethodAnswer.OK;
    } catch (SQLException ex) {
        log.info("SQLException. Class: StandardTableIntId. Method: changeField(String field, String value). Parameters: table='" + tableName + "' id='" + id + "' field='" + field + "' value='" + value + "'");
        return MethodAnswer.DB_EXCEPTION;
    }
    finally
    {
        dbc.closeConnection();
    }   
    }
    protected MethodAnswer changeField(String field, String value) {
    ...
    st.setString(1, value);
    ...}
    protected MethodAnswer changeField(String field, Long value) {
    ...
    st.setLong(1, value);
    ...}
    protected MethodAnswer changeField(String field, boolean value) {
    ...
    st.setBoolean(1, value);
    ...}
    ...
}   


//2nd
public class StandardTableIntIdTimed extends StandardTableIntId{...}

//3rd   
public class Company extends StandardTableIntIdTimed {
    ...
    public MethodAnswer setMainIncomeBankAccountId(Integer value) {
        MethodAnswer ans;
// !!! Code crashes in next command (if value==null). Eclipse just said: "Source not found." in debugging mode.
            ans = changeField("mainIncomeBaId", value); 
        return ans;
    }
    ...
}

代码在标记为“//!!!”的行中崩溃 评论。当“值”等于 null 时会发生这种情况。

在相同的方法中,但 String 或 Timestamp 参数一切正常:

public MethodAnswer setPostAddress(String postAddress) {
    MethodAnswer ans;
    ans = changeField("postAddress", value); 
    return ans;
}
public MethodAnswer setDateTimeBegin(Timestamp value) {
    MethodAnswer ans;
    ans = changeField("DateTimeBegin", value); 
    return ans;
}

无法理解这里发生了什么以及如何解决它。

4

2 回答 2

1

好吧,我在这里猜测了一下,但是......

protected MethodAnswer changeField(String field, Integer value)

如果您在此方法中将value参数转换为int, and valueis NULL那么您将获得 NullPointerExceptionvalue解决方案:在将其转换为 int 之前检查是否为 NULL。

于 2012-10-23T14:09:52.403 回答
0

您可能正在使用value. 由于值为 null,因此应用程序会抛出 NullPointerException

例如:

public void test(Integer n){
  System.out.println(n + 4);
}

使用上面的代码,下面的代码会抛出 NullPointerException

test(null)
于 2012-10-23T14:10:51.493 回答