当数据库中为null时,整数变量为零

时间:2013-10-02 07:52:14

标签: java jdbc integer

我已将变量声明为

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")), 

1 个答案:

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