Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 声明字符串数组时出错_Java_String - Fatal编程技术网

Java 声明字符串数组时出错

Java 声明字符串数组时出错,java,string,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.get

我在使用字符串数组时遇到此错误 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
操作符创建数组。

您必须将数组
列表
初始化为特定长度。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"));
....
然后在创建JList的位置调用此方法

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

列表当前为空,因此没有可附加项目的内容

试着做类似的事情

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();
List List=newarraylist;
字符串[]listArray=null;
String sql=“从pos_产品中选择*”;
ResultSet rs=mysql\u query.execute\u mysql(variables.con.conn,sql);
while(rs.next()){
System.out.println(rs.getString(“产品名称”);
添加(rs.getString(“产品名称”);
i++;
}
listArray=list.toArray();

这将允许在从结果集中读取所有项目时创建数组的大小。

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

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

    }
List List=newlinkedlist();
String sql=“从pos_产品中选择*”;
ResultSet rs=mysql\u query.execute\u mysql(variables.con.conn,sql);
while(rs.next()){
System.out.println(rs.getString(“产品名称”);
添加(rs.getString(“产品名称”);
}

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

ArrayList<String> list = new ArrayList<String>();
...
list.add(rs.getString("product_name"));
ArrayList list=new ArrayList();
...
添加(rs.getString(“产品名称”);

但我希望尺寸是动态的。。我不想分配太多或太小的空间。@Deepak看看我的答案。在您知道需要多大的数组后,您可能可以创建该数组。@如果是这样,您使用的数据结构是错误的。在Java数组中,大小是固定的,ChrisJ答案是正确的(NullPointerException)。另一种选择是,当您对ArrayList进行大量写入时,使用ArrayList效率低下。它会创建一个新数组,每次添加新元素时索引都要大一个。@Endophage true!更改为LinkedList如果您对数据的大小有一个初步的了解,您可以指定该数据的初始容量。OP提到他将使用JList,所以我认为不会太长,但我在使用列表时遇到了问题。我只能输入JList向量或数组类型的数据结构。我不能使用列表。。任何建议..是的,将数据库检索与显示分离,并创建一个方法。。。让我把它写在答案里。。。查看我的编辑
ArrayList<String> list = new ArrayList<String>();
...
list.add(rs.getString("product_name"));