我在使用 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;
}
无法理解这里发生了什么以及如何解决它。