1

我需要从我的 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();

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

4

2 回答 2

2

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

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,在我尝试这个之前你能详细说明一下吗?谢谢!!

因此,getter 和 setter 是“一般”用于操作 Object 的属性以保留封装的方法——在 OOP 中非常重要。Setter 用于初始化属性,getter 用于获取 Object 的属性。

现在我为您编写了将数据从 sqlite 存储到 ArrayList 的方法示例。有这一行:

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

Foo ObjectsetId(c.getInt(0))setter以一个 Integer 作为参数,现在使用此方法,您将使用来自的数据填充 id 值。Cursor

于 2013-03-10T18:02:06.403 回答
0

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

于 2013-03-10T18:01:00.447 回答