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 回答