2011-02-23 92 views
0

當我使用一個字符串數組我正在此錯誤 顯示java.lang.NullPointerException錯誤聲明字符串數組

我使用的代碼如下..

String[] list = null; 
String sql = "SELECT * FROM pos_products"; 
ResultSet rs = mysql_query.execute_mysql(variables.con.conn, sql); 
while (rs.next()) { 
    System.out.println(rs.getString("product_name")); 
    list[i] = rs.getString("product_name"); 
    i++; 
} 

我必須添加一個更多的事情後seeign這個答覆..首先感謝你們的迴應..現在的問題是我使用JList,我必須添加內容到它..如果我使用列表我不能直接添加。我可以使用矢量或字符串數​​組。你對此有何看法?

回答

1

您的清單是null,從而null[i]引發NullPointerException異常

你應該考慮要麼初始化爲ChrisJ描述或使用列表

List<String> list = new ArrayList<String>(); 
.... 
    list.add(rs.getString("product_name")); 
.... 

編輯

這解決了兩個部分,你的NullPointerException和數據的動態獲取。

你提到你需要把它放在一個JList中,在這種情況下,你仍然可以使用這種方法,但將數據檢索從顯示代碼中分離出來。

因此,創建一個方法列表如下:

public String[] fetchOptions() { 
     List<String> list = new ArrayList<String>(); 
     ... db code here 
     while .... etc. et 
      list.add(rs.getString("product_name")); 
     ... 
     // convert it to String[] 

    return list.toArray(new String[list.size()]); 
} 

然後再調用這個方法,你創建你的JList

String [] options = fetchOptions(); 
JList aList = ... use it normally 
+0

但我遇到了使用列表的問題。我只能放入JList向量或數組類型的數據結構。我不能使用列表..任何建議.. – Deepak 2011-02-23 23:01:04

+0

Yeap,從顯示分離數據庫檢索,並創建一個方法...讓我把它放在答案...看我的編輯 – OscarRyz 2011-02-23 23:02:07

+0

這只是完美!我得到它的工作謝謝! – Deepak 2011-02-23 23:12:54

4

您的代碼聲明一個字符串數組,但它不會創建數組對象。換句話說,它不會分配內存用於存儲數組的內容。

你應該寫類似:

String[] list = new String[SOME_SIZE]; 

new操作創建數組。

+0

,但我想要的大小是動態的..我不想分配空間太大或太小的空間.. – Deepak 2011-02-23 22:54:00

+0

@Deepak看看我的答案。您可能能夠在知道您需要多大之後創建該陣列。 – Endophage 2011-02-23 22:58:12

+0

@Deepak在這種情況下,你正在使用錯誤的數據結構。在Java數組中,大小是固定的,ChrisJ的回答對你的問題是正確的(NullPointerException)。爲另一種選擇請參閱我的:) http://stackoverflow.com/questions/5098230/error-in-declaring-string-array/5098266#5098266 – OscarRyz 2011-02-23 22:58:29

1

您必須將數組list初始化爲特定的長度。 ResultSet對象是否具有該組大小的某個函數/屬性?然後,你可以做到以下幾點:

String sql = "SELECT * FROM pos_products"; 
ResultSet rs = mysql_query.execute_mysql(variables.con.conn, sql); 
String[] list = new String[rs.size()]; 
while (rs.next()) 
{ 
    System.out.println(rs.getString("product_name")); 
    list[i] = rs.getString("product_name"); 
    i++; 
} 
1

列表目前爲空,所以沒有什麼可追加項目。

嘗試做這樣反而

List<String> list = new ArrayList<String>; 
String[] listArray = null; 
String sql = "SELECT * FROM pos_products"; 
ResultSet rs = mysql_query.execute_mysql(variables.con.conn, sql); 
while (rs.next()) { 
System.out.println(rs.getString("product_name")); 
list.add(rs.getString("product_name")); 
i++; 
} 
listArray = list.toArray(); 

這東西可以讓你的數組的大小以您已經閱讀所有從ResultSet的項目時創建。

1

我建議你改變了字符串列表(或設置)字符串數組,因爲在你的榜樣,你不知道有多少產品將是:

List<String> list = new LinkedList<String>(); 
String sql = "SELECT * FROM pos_products"; 
     ResultSet rs = mysql_query.execute_mysql(variables.con.conn, sql); 
     while (rs.next()) { 
     System.out.println(rs.getString("product_name")); 
     list.add(rs.getString("product_name")); 

    } 
+0

謝謝你。我會盡快達到! – Deepak 2011-02-23 22:57:06

+0

如果您有大量的寫入操作,則使用ArrayList效率不高。它會在每次添加新元素時創建一個新的數組,其中一個索引較大。 – Endophage 2011-02-23 22:59:21

+0

@Endophage真實!已更改爲鏈接表 – Mauricio 2011-02-23 23:06:18

1

如前所述,你需要聲明該數組使用「新」,但我猜你沒有這樣做,因爲你不知道該數組應該是多大。在這種情況下,你有沒有考慮過使用ArrayList?

ArrayList<String> list = new ArrayList<String>(); 
... 
list.add(rs.getString("product_name"));