2012-07-22 31 views
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 
+0

是这样产生任何错误? – SALMAN 2012-07-22 18:39:39

回答

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(); 

谢谢:)

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 ; 
    } 
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(); 
相关问题