错误声明字符串数组

问题描述:

当我使用一个字符串数组我正在此错误 显示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,我必须添加内容到它..如果我使用列表我不能直接添加。我可以使用矢量或字符串数​​组。你对此有何看法?

您的清单是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

您的代码声明一个字符串数组,但它不会创建数组对象。换句话说,它不会分配内存用于存储数组的内容。

你应该写类似:

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

您必须将数组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++; 
} 

列表目前为空,所以没有什么可追加项目。

尝试做这样反而

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的项目时创建。

我建议你改变了字符串列表(或设置)字符串数组,因为在你的榜样,你不知道有多少产品将是:

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

如前所述,你需要声明该数组使用“新”,但我猜你没有这样做,因为你不知道该数组应该是多大。在这种情况下,你有没有考虑过使用ArrayList?

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