2013-10-02 44 views
0

我已經聲明的變量作爲整型變量是零是零在數據庫

private Integer projectId; 

    public void setProjectId(Integer projectId) { 
    this.projectId= projectId; 
} 

public Integer getProjectId() { 
    return 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

你必須調用wasNull(),看它是否爲空:

Integer projectId = rs.getInt("PROJECT_ID"); if (rs.wasNull()) projectId = null; return new Project (rs.getInt("ID"), projectId), ...); 

對於理智的原因,如果您移動代碼到一個新的方法,它可能更好。 –

+0

是你的getter還是setter使用原始變量? –

+0

@ ns47731我已經包含了我的getter和setter問題。 – user75ponic

回答

8

你必須自己處理這種情況。該ResultSet documentation明確規定(重點煤礦):

getInt int getInt(int columnIndex)

獲取此ResultSet對象的當前行中指定列的值作爲 的Java編程語言中int。

參數:
* columnIndex - 第一個柱是1,第二個是2,......

返回:
列值; 如果該值爲 是SQL NULL,則返回值爲0

你必須調用wasNull()讀一列值後,你的字段設置爲null如果是這樣的話。因此,像下面:

/** 
* 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; 
} 
+0

Joey我已經包含了我的檢索數據庫代碼片斷,如何檢查'wasNull'? – user75ponic

+2

這有點令人討厭,因爲你*首先*必須檢索該值,然後*然後*檢查NULL(這會使條件運算符在這裏無用)。我添加了一些代碼。 – Joey

+0

啊我明白了,那麼最好的方法和練習是什麼? – user75ponic