3

私はカーソルの助けを借りてsqliteデータベースからオブジェクトを取得しています。そして、それらを配列リストに格納したいと思います。問題は、返されたデータのサイズが事前にわからないことです。では、どうすればそれらを配列リストに入れることができますか?

コード:

public Student findAll()
    {
        db = helper.getWritableDatabase();
        Cursor cursor = db.rawQuery("select sid, name, age from t_student", null 
                );

        if(cursor.moveToNext())
            return new Student(cursor.getInt(cursor.getColumnIndex("sid")), cursor.getString(cursor.getColumnIndex("name")), cursor.getInt(cursor.getColumnIndex("age")));
        return null;
    }

Main:

ArrayList<Student> studentArrayList = new ArrayList<Student>();

        studentArrayList.add(dao.findAll()); //doing this will only return the first object from the database
4

3 に答える 3

7

各 ArrayList インスタンスには容量があります。容量は、リスト内の要素を格納するために使用される配列のサイズです。常に少なくともリスト サイズと同じ大きさです。要素が ArrayList に追加されると、その容量は自動的に増加します。成長ポリシーの詳細は、要素の追加には一定の償却時間コストがあるという事実以外は指定されていません。

これは、ArrayList をよりよく理解するのに役立ちます。

public List<Student> findAll() {
        List<Student> studentArrayList = new ArrayList<Student>();
        db = helper.getWritableDatabase();
        Cursor cursor = db.rawQuery("select sid, name, age from t_student", null 
                );



         while(cursor.moveToNext()) {
               studentArrayList.add(new Student(cursor.getInt(cursor.getColumnIndex("sid")), cursor.getString(cursor.getColumnIndex("name")), cursor.getInt(cursor.getColumnIndex("age"))));
            }

            return studentArrayList ;
        }

    ArrayList<Student> studentArrayList = new ArrayList<Student>();

    studentArrayList=findAll();

ありがとう :)

于 2012-07-22T18:50:34.117 に答える
2

これを試して:

public List<Student> findAll() {
        List<Student> studentArrayList = new ArrayList<Student>();
        db = helper.getWritableDatabase();
        Cursor cursor = db.rawQuery("select sid, name, age from t_student", null 
                );

        while(cursor.moveToNext()) {
           studentArrayList.add(new Student(cursor.getInt(cursor.getColumnIndex("sid")), cursor.getString(cursor.getColumnIndex("name")), cursor.getInt(cursor.getColumnIndex("age"))));
        }

        return studentArrayList ;
    }
于 2012-07-22T18:41:02.300 に答える
1

あなたの問題は、代わりに:

if(c.moveToNext()) {
    // ...
}

while ループで繰り返す必要があります。

while(c.moveToNext()) {
    // ...
}

したがって:

List<Student> myList = new ArrayList<String>();
Cursor c = ...

while(c.moveToNext()) {
    myList.add(new Student(cursor.getInt(cursor.getColumnIndex("sid")), cursor.getString(cursor.getColumnIndex("name")), cursor.getInt(cursor.getColumnIndex("age")));        
}
c.close();
于 2012-07-22T18:41:15.070 に答える