声明字符串数组时出错

时间:2011-02-23 22:48:35

标签: java string

当我使用字符串数组时,我收到此错误 显示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++;  
 }

我必须在看到这些回复之后添加一件事。首先,谢谢你们的回复..现在的问题是我使用JList,我必须添加内容..如果我使用列表我不能添加直。我可以使用矢量或字符串数​​组。你对此有何看法?

6 个答案:

答案 0 :(得分:4)

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

你应该写一些类似的东西:

String[] list = new String[SOME_SIZE];

new运算符创建数组。

答案 1 :(得分: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++;
}

答案 2 :(得分: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 

答案 3 :(得分: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中的所有项目时创建数组的大小。

答案 4 :(得分:1)

我建议您更改String List(或Set)的字符串数组,因为在您的示例中您不知道将有多少产品:

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"));  

    }

答案 5 :(得分:1)

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

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