错误声明字符串数组
当我使用一个字符串数组我正在此错误 显示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
您的代码声明一个字符串数组,但它不会创建数组对象。换句话说,它不会分配内存用于存储数组的内容。
你应该写类似:
String[] list = new String[SOME_SIZE];
的new
操作创建数组。
,但我想要的大小是动态的..我不想分配空间太大或太小的空间.. – Deepak 2011-02-23 22:54:00
@Deepak看看我的答案。您可能能够在知道您需要多大之后创建该阵列。 – Endophage 2011-02-23 22:58:12
@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"));
}
如前所述,你需要声明该数组使用“新”,但我猜你没有这样做,因为你不知道该数组应该是多大。在这种情况下,你有没有考虑过使用ArrayList?
ArrayList<String> list = new ArrayList<String>();
...
list.add(rs.getString("product_name"));
但我遇到了使用列表的问题。我只能放入JList向量或数组类型的数据结构。我不能使用列表..任何建议.. – Deepak 2011-02-23 23:01:04
Yeap,从显示分离数据库检索,并创建一个方法...让我把它放在答案...看我的编辑 – OscarRyz 2011-02-23 23:02:07
这只是完美!我得到它的工作谢谢! – Deepak 2011-02-23 23:12:54