Java是面向?qū)ο蟮母呒壵Z言。java中,null表示類或?qū)ο蟮淖兞渴强眨淮砣魏螌ο蠡驅(qū)嵗?,可以?em>null賦給引用類型變量,但不可以將null賦給基本類型變量;任何對象在沒有進行初始化時,它默認的值都是null。沒有實體的對象稱為空對象;空對象不能使用,即不能讓一個空對象去調(diào)用方法產(chǎn)生行為;大名鼎鼎的NullPointerException就是因為應(yīng)用程序試圖在需要對象的地方使用null時拋出來的。例如下面這樣的使用便會拋出NullPointerException異常:
String str = null;
System.out.println(str.toString());
有許多問題的答案我們并不知曉,我們被巨大的未知領(lǐng)域包圍著。在數(shù)據(jù)庫中“未知的”這個概念用NULL表示;NULL在數(shù)據(jù)庫表示未知。NULL 不等于零或空格。NULL 值不視作大于、小于或等于任何其它值。當(dāng)一個變量、列或常量具有NULL值時,它的值是未知的、不確定的?!拔粗摹迸c空白或零或布爾值FALSE完全不同?!拔粗摹币馕吨撟兞扛緵]有值,因此不能與其他變量直接進行比較。
NULL值具有以下三個規(guī)則:
(1)一個NULL不與其他任何值相等;一個NULL不與其他任何值不等;
(2)在對一個NULL值應(yīng)用函數(shù)時,一般都會得到一個NULL值作為結(jié)果。
(3)一般而言,只要執(zhí)行涉及一個或多個NULL值的比較操作,那個比較的結(jié)果也是NULL值,它不同于TRUE或FALSE,因而這樣的比較除了失敗,沒有任何幫助作用。
在數(shù)據(jù)庫中我們可以通過特定的關(guān)鍵字得到NULL。
例如:有如下結(jié)構(gòu)的表employee(emp_id,fname,minit,lname,job_id,job_lvl,pub_id,hire_date)其中minit列可以為NULL。可以使用IS NULL或IS NOT NULL關(guān)鍵字。
SELECT * FROM employee WHERE employees IS NOT NULL
SELECT * FROM employee WHERE employees IS NULL
和java不同的是數(shù)據(jù)庫中可以將NULL賦給任何數(shù)據(jù)類型。這樣一來,我們從數(shù)據(jù)庫中讀取字段的值后,在java程序中如何判斷讀取的值是否為null呢?用name==null嗎?顯然不行,==是判斷兩個變量或?qū)嵗遣皇侵赶蛲粋€內(nèi)存空間,除非這個name是String類型的。而equals()方法呢?是判斷兩個變量或?qū)嵗赶虻膬?nèi)存空間的值是不是相同。
java.sql.ResultSet接口中的boolean wasNull()方法可以解決這個問題:
boolean wasNull():報告最后一個讀取的列是否具有值 SQL NULL。注意,必須首先對列調(diào)用一個獲取方法嘗試讀取其值,然后調(diào)用 wasNull ()方法查看讀取的值是否為 SQL NULL。如果發(fā)生數(shù)據(jù)庫訪問錯誤將拋出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);
}
}
寫作這段文字的靈感來源于最近有些客戶把空數(shù)據(jù)能做進公司的系統(tǒng)和一位自稱為空空的同事。
* 注凡是表示Java中的空使用的是小寫的“null”數(shù)據(jù)庫中的空使用的是大寫的“NULL”
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。