我已将变量声明为
private Integer projectId;
public void setProjectId(Integer projectId) {
this.projectId= projectId;
}
public Integer getProjectId() {
return projectId;
}
从数据库中检索值时,如果projectId在数据库表中为空,则显示为0
,例如
log.info("?? "+projectList.get(1).getProjectId());
上述结果为0
。
为什么它显示为0
虽然它在表格中为空,但如果表格中为null
,我该如何将其设为null
?
修改1
while (rs.next()) {
projectList.add(mapProjects(resultSet));
}
private static Project mapProjects(ResultSet rs)
throws SQLException {
return new Project ((rs.getInt("ID")),
(rs.getInt("PROJECT_ID")),
答案 0 :(得分:10)
你必须亲自处理这个案子。 ResultSet
documentation明确指出(强调我的):
getInt int getInt(int columnIndex)
在此ResultSet对象的当前行中检索指定列的值,作为int中的int Java编程语言。
参数:
* columnIndex - 第一列是1,第二列是2,...返回:
列值; 如果值 是SQL NULL,返回的值是0
您必须在阅读列值后致电wasNull()
并将字段设置为null
(如果是这种情况)。如下所示:
Integer projectId = rs.getInt("PROJECT_ID");
if (rs.wasNull()) projectId = null;
return new Project (rs.getInt("ID"), projectId), ...);
出于理智原因,如果将代码移动到新方法中可能会更好:
/**
* Retrieves the value from the designated column as an {@link Integer}
* object.
*
* @param rs
* The ResultSet to read from.
* @param columnName
* The column name to read.
* @return {@code null} if the column value was SQL NULL; its value as an
* integer otherwise.
*/
public static Integer getInteger(ResultSet rs, String columnName) {
int v = rs.getInt(columnName);
return rs.wasNull() ? null : v;
}