-2

オブジェクトの配列を返すメソッドが必要です。以下は私のコードですが、ヌルポインター例外が発生し、理由がわかりません。

    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;日食は言う:

この行に複数のマーカー - Null ポインター アクセス: 変数の結果は、この場所でのみ null にすることができます

@SuppressWarnings("null")そのため、メソッドの前に追加しました。ただし、メソッドが呼び出されると、null ポインター例外がスローされます。私が問題を抱えている行の前に、dbに保存されている場所名を印刷しようとしましたが、うまくいきました。したがって、エラー出力が示すように、これはデータベースの問題ではありません。

java.lang.NullPointerException
    at PlaceMod.getPlaces(PlaceMod.java:29)
    at PlaceCont.list(PlaceCont.java:15)
    at Main.main(Main.java:14)

このコードの何が問題になっていますか?

4

3 に答える 3

4

null 配列を作成しました。を使用しArrayListます(結果セットのサイズがわからないため):

 List<Place> result = new ArrayList<>();

 while(rs.next()) {
   ...
   result.add(p);
 }
于 2013-01-12T20:11:48.417 に答える
0

配列を割り当てたことがないため、試してみるとresultまだですnullresult[counter] = p;

于 2013-01-12T20:10:29.720 に答える
0

配列を初期化していません。この配列を使用する前に、次のようなものを配置するresult = new Place[size]必要があります (サイズは配列の長さです)。ここでの使用を検討する必要がArrayListあります。

于 2013-01-12T20:10:58.393 に答える