我需要一个返回对象数组的方法。下面是我的代码,但我得到空指针异常,不知道为什么。
public Place[] getPlaces()
{
Place result[] = null ;
int counter = 0;
try {
PreparedStatement ps = this.db.prepareStatement("select * from places");
ResultSet rs = ps.executeQuery();
while(rs.next()) {
Place p = new Place();
p.setPlaceID(rs.getInt("placeID"));
p.setPlaceName(rs.getString("placeName"));
result[counter] = p;
counter++;
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
在线result[counter] = p;
eclipse说:
此行有多个标记 - 空指针访问:变量结果在此位置只能为空
所以,我在方法之前添加了@SuppressWarnings("null")
。但是,当调用方法时,它会抛出空指针异常。在我遇到麻烦之前,尝试打印存储在db中的地名并且它有效。因此,这不是数据库问题,因为错误输出显示:
java.lang.NullPointerException
at PlaceMod.getPlaces(PlaceMod.java:29)
at PlaceCont.list(PlaceCont.java:15)
at Main.main(Main.java:14)
此代码有什么问题?
答案 0 :(得分:5)
您创建了一个空数组。使用ArrayList
(因为您不知道结果集的大小):
List<Place> result = new ArrayList<>();
while(rs.next()) {
...
result.add(p);
}
答案 1 :(得分:0)
您从未将数组分配给result
,因此当您尝试null
时,它仍为result[counter] = p;
答案 2 :(得分:0)
您没有初始化阵列。在使用此数组之前,您必须输入result = new Place[size]
之类的内容(size是数组的长度)。您应该考虑在这里使用ArrayList
。