2015-10-26 80 views
0

這裏顯示空行指針異常在行​​;如何解決使用數組時空指針異常?

String[] count = null; 
String[] arr = null; 
int i = 0; 
rs2 = st2.executeQuery("SELECT COUNT(*) as y FROM " + usrtbl + " WHERE user_id NOT IN (SELECT user_id FROM " + usrroletbl + ")"); 
rs2.next(); 
if (rs2.getInt("y") == 0) { 
    arr[i] = "false"; 
    count = arr; 
    i++; 
} else { 
    arr[i] = "true"; 
    count = arr; 
    i++; 
} 

任何幫助將不勝感激。

+0

你怎麼能訪問'ARR [0]'轉換成ArrayList的數組?當你聲明'String [] arr = null;'時 – ravi

回答

0

您已將arr定義爲null您尚未爲其分配任何內存。所以當然,訪問arr[i]將導致NullPointerException

您可以先運行SQL查詢來獲取結果數量並分配空間,例如。

arr = new String[<count>]; 

或者您可以使用ArrayList來保存這些值。這更簡單,因爲它將動態增長以保存您的數據。另外,您應該考慮轉換arr(或您的ArrayList)以保留boolean。然後你可以直接使用truefalse(而不是他們的字符串等價物)。

0

您需要初始化String[] array

方法1

String[] errorSoon = new String[100]; // <--initialized statement, this is fixed size array, so you need to set the size accordingly, keeping memory usage in mind. 

Approach2

使用列表

List<String> errorSoon = new ArrayList<String>(); 

同樣如@dave所述,如果真的需要在這裏有數組,或者只有boolean variable可以爲你工作。

0

由於@Dave說你已經聲明兩個字符串數組爲空,所以當然你會得到NullPointerException。您必須首先知道結果集的大小,然後根據大小聲明數組。

但是,而不是我會建議你使用ArrayList。它很簡單,可以動態地添加你的結果。你可以這樣做 -

List<String> list=new ArrayList<String>(); 
while(rs.next()){ 
if(// your condition){ 
    list.add("something"); 
} 
else{ 
    list.add("something"); 
} 
} 

所以它會繼續在列表中添加「東西」直到最後一行被覆蓋。 然後,您可以根據您的要求輕鬆地遍歷列表。 或者你也可以使用下面的命令 -

Object obj[]=list.toArray(); //Note that it will create an Array of Object datatype. You have to typecast it to your required datatype later if you want to print or manipulate the data.