[英]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.