2012-07-22 17 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(); 
相關問題