繁体   English   中英

声明字符串数组时出错

[英]Error in declaring string array

使用字符串数组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,并且我必须向其中添加内容。.如果我使用列表,则无法直接添加。 我可以使用向量或字符串数​​组。 您对此有何看法?

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

您应该编写如下内容:

String[] list = new String[SOME_SIZE];

new运算符创建数组。

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

您的列表为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 

list当前为null,因此没有要附加的项目。

尝试做这样的事情

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

    }

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM