問題描述及原因:
rs.getInt方法,若數據庫中記錄的數值爲null,getInt返回的是數值“0”,而不是null!
long java.sql.ResultSet.getLong(String columnLabel)
int java.sql.ResultSet.getInt(String columnLabel)
等均爲:“若數據庫中記錄的數值爲null,返回數值“0”,而不是null”!
因此,
“category.setIsLeaf(rs.getInt("IS_LEAF"));”
執行後,category的isLeaf屬性不可能爲NULL
如想讓category的isLeaf屬性有NULL值,就需要其它處理了
jdk中的相關解釋:
int java.sql.ResultSet.getInt(String columnLabel) throws SQLException
Retrieves the value of the designated column in the current row of this ResultSet object as an int in the Java programming language.
Parameters:
columnLabel the label for the column specified with the SQL AS clause. If the SQL AS clause was not specified, then the label is the name of the column
Returns:
the column value; if the value is SQL NULL, the value returned is 0
Throws:
SQLException - if the columnLabel is not valid; if a database access error occurs or this method is called on a closed result set
解決方案:
我個人是加上判斷,代碼如下:
ResultSet rs = statement.executeQuery("select Id from table");
Integer id = 0;
if (rs.getObject("Id") != null) {
id = rs.getInt("Id");
} else {
id = null;
}
通過獲取對象來首先判斷其是否爲空,然後再用對應的getXXX方法得到具體的值。