我在使用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;
}
无法了解此处发生的事情以及如何解决问题。
答案 0 :(得分:1)
好的,我猜这里有点,但是......
protected MethodAnswer changeField(String field, Integer value)
如果您在此方法中将value
参数转换为int
,value
为NULL
,则会出现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)