String str = null;
System.out.println(str.toString());
有許多問題的答案我們並不知曉,我們被巨大的未知領域包圍着。在數據庫中“未知的”這個概念用NULL表示;NULL在數據庫表示未知。NULL不等於零或空格。NULL 值不視作大於、小於或等於任何其它值。當一個變量、列或常量具有NULL值時,它的值是未知的、不確定的。“未知的”與空白或零或布爾值FALSE完全不同。“未知的”意味着該變量根本沒有值,因此不能與其他變量直接進行比較。
NULL值具有以下三個規則:
(1)一個NULL不與其他任何值相等;一個NULL不與其他任何值不等;
(2)在對一個NULL值應用函數時,一般都會得到一個NULL值作爲結果。
(3)一般而言,只要執行涉及一個或多個NULL值的比較操作,那個比較的結果也是NULL值,它不同於TRUE或FALSE,因而這樣的比較除了失敗,沒有任何幫助作用。
在數據庫中我們可以通過特定的關鍵字得到NULL。
例如:有如下結構的表employee(emp_id,fname,minit,lname,job_id,job_lvl,pub_id,hire_date)其中minit列可以爲NULL。可以使用IS NULL或IS NOT NULL關鍵字。
SELECT * FROM employee WHERE employees IS NOT NULL
SELECT * FROM employee WHERE employees IS NULL
和java不同的是數據庫中可以將NULL賦給任何數據類型。這樣一來,我們從數據庫中讀取字段的值後,在java程序中如何判斷讀取的值是否爲null呢?用name==null嗎?顯然不行,==是判斷兩個變量或實例是不是指向同一個內存空間,除非這個name是String類型的。而equals()方法呢?是判斷兩個變量或實例所指向的內存空間的值是不是相同。
java.sql.ResultSet接口中的boolean wasNull()方法可以解決這個問題:
boolean wasNull():報告最後一個讀取的列是否具有值 SQL NULL。注意,必須首先對列調用一個獲取方法嘗試讀取其值,然後調用wasNull ()方法查看讀取的值是否爲 SQL NULL。如果發生數據庫訪問錯誤將拋出SQLException。
如:Java代碼
String value="";
int n;
while(rs.next()){
value=rs.getString("name");
if(rs.wasNull()){
System.out.println("null");
}else{
System.out.println(value);
}
n=rs.getInt("number");
if(rs.wasNull()){
System.out.println("null");
}else{
System.out.println(n);
}
}