在Java中使用NULL作为Integer参数

时间:2012-10-23 14:06:12

标签: java null integer

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

我有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 params是正常的:

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;
}

无法了解此处发生的事情以及如何解决问题。

2 个答案:

答案 0 :(得分:1)

好的,我猜这里有点,但是......

protected MethodAnswer changeField(String field, Integer value)

如果您在此方法中将value参数转换为intvalueNULL则会出现NullPointerException 。解决方案:在将value转换为int之前检查{{1}}是否为NULL。

答案 1 :(得分:0)

您可能正在使用value进行一些计算。由于value为null,因此应用程序抛出NullPointerException

EG:

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

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

test(null)
相关问题