2014-02-18 56 views
0

我試圖從HBase表中檢索Long值。但是在檢索特定的列系列時它會給出NullPointerException。如何讀取HBase中的空值java

示例代碼段:

long total_size=0; 
total_size +=Bytes.toLong(rr.getValue(Bytes.toBytes("size"),Bytes.toBytes("size")))); 

我也只要存儲值的大小。一些大小的vlaue是空的。我想檢索空值並將它們分配給「0」ZERO。

請給我適當的代碼片段。

謝謝。

回答

0

這是因爲Bytes.toLong()方法不檢查檢索byte[]是否null與否並調用其byte[].length這將引發你的異常。您可以嘗試以下解決辦法:

String longValue = Bytes.toString(rr.getValue(Bytes.toBytes("size"),Bytes.toBytes("size"))); 
total_size += (longValue != null ? Bytes.toLong(rr.getValue(Bytes.toBytes("size"),Bytes.toBytes("size")):0l); 

try{ 
    total_size +=Bytes.toLong(rr.getValue(Bytes.toBytes("size"),Bytes.toBytes("size")))); 
}catch(NullPointerException e){ 
    // no need to increment total_size by 0 
} 
+0

在第1的方法,給左邊的值作爲ASCII字符,所以分配到長型的NumberFormat給予例外。第二種方法給予空指針異常。 – srinivasa

+0

你是否從早期的大小列中獲得至少一個非空值?還有一件事,當你嘗試第二種方法時,你每次都會得到Nullpointer異常? –

+0

在第一種方法中,longValue變量是String,我只是用它來知道'size'列值是否爲null。請不要指定它。這就是爲什麼我檢查它不爲空,如果是的話,我再次從「大小」列中檢索長值。在這種情況下,你得到了NumberForm異常,意味着你沒有在「大小」列中保存「長」值。請確保這一點。 –