0

我已将变量声明为

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虽然它在表中为空,我怎样才能使它像nullnull表中一样?

编辑 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")), 
4

1 回答 1

10

你必须自己处理那个案子。该ResultSet文件明确指出(强调我的):

getInt int getInt(int columnIndex)

检索此 ResultSet 对象的当前行中指定列的值,作为 Java 编程语言中的 int。

参数:
* 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;
}
于 2013-10-02T07:54:43.250 回答