如何在2D Arraylist中存储来自SQLite的数据?

时间:2013-03-10 17:54:25

标签: android sqlite arraylist

我需要从我的SQLite数据库中获取所有信息并将其存储在数组列表中,或者如果有更好的方法,则需要其他方式。我的数据库有6列,这是我试图提取数据并将其存储在Arraylist索引中的方式;

db.open();
    for(int i = 0; i<= amount; i++)
    {

        Cursor c = db.fetchAllNotes();
        if (c.moveToFirst())
        {
            do {      
                mid = c.getString(0);
                place =c.getString(1);
                info =c.getString(2);
                coordl1 =c.getString(3);
                coordl2 =c.getString(4);
                colour =c.getString(5);

                 //code here to store each string in an Array index
                mapSetupList.add(mid,place,info,coordl1,coordl2,colour);

            }while (c.moveToNext());
        }
    }
    db.close();

我知道如何创建一个数组列表,但我不知道如何在一个索引中存储6个字符串,我尝试使用2D Arraylists,但这似乎太复杂了,我认为这不是正确的方法去做吧。有没有更好的方法来做到这一点,如果不是如何使用Arraylists?

2 个答案:

答案 0 :(得分:2)

如何创建一个自己定义的Object,将所有列包装为属性?

public class Foo {

   private int id; // alternative to id column in db
   private String type;
   private String date;
   ...

   public void setId(int id) { // setter
      this.id = id;
   }

   public int getId() { // getter
      return this.id;
   }
}

然后创建ArrayList<Foo>,现在您只需将 SQLite 中的数据保存到ArrayList中:

public void store() {
   Cursor c = null; // first declare and initialise appropriate objects
   ArrayList<Foo> foos = new ArrayList<Foo>();
   Foo member = null;
   try {
      c = db.rawQuery(query, whereArgs); // perform query
      if (c.moveToFirst()) { // move cursor to first row because implicitly
         do { // cursor is position before first row
            member = new Foo(); // for each row create new Foo
            member.setId(c.getInt(0)); // initialise properties
            member.setType(c.getString(1));
            member.setDate(c.getString(2));
            ...
            foos.add(member); // add Foo into ArrayList
         } while (c.moveToNext()); // it moves cursor to next row
      }
   }
   finally { // in finally block release datasource(s), cursor(s)
      if (c != null) {
         c.close();
      }
      if (db != null && db.isOpen()) {
         db.close();
      }
   }
}

注意:我推荐这种方法。它清晰,安全,有效。不要忘记在完成工作后释放任何数据源,游标以避免通常抛出的异常,例如游标已经打开,数据库已经关闭等等。

更新

  

我不确定类示例,使用已定义的对象和   在我尝试这个之前,你能详细说明一下吗?谢谢   你!

因此,getter和setter是“通常”用于操纵Object的特性来保存 Encapsulation 的方法 - 在OOP中非常重要。 Setter用于初始化属性和getter以获取Object的属性。

现在我为你写了一个从sqlite到ArrayList的商店数据存储方法的例子。有这一行:

member.setId(c.getInt(0)); 

其中setId(c.getInt(0)) Foo对象的设置者,其中一个Integer作为参数,现在您将使用此方法填充来自Cursor的数据的ID值。

答案 1 :(得分:0)

创建一个包含您喜欢的所有信息的类,然后创建它的实例,然后将该实例添加到ArrayList。