【问题标题】:How to store data from SQLite in a 2D Arraylist?如何将来自 SQLite 的数据存储在 2D Arraylist 中?
【发布时间】:2013-03-10 17:54:25
【问题描述】:

我需要从我的 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 来做到这一点?

【问题讨论】:

  • 现在我写了答案,花了一点时间。
  • 我要试试你的答案,它看起来有点复杂,但我会好好尝试一下!感谢您的努力!

标签: android sqlite arraylist


【解决方案1】:

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

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&lt;Foo&gt;,现在您可以简单地将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)); 

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

【讨论】:

  • 我喜欢清晰、安全、有效的声音! :) 我不确定类示例,使用定义的对象以及 getter 和 setter,在我尝试之前你能详细说明一下吗?谢谢!!
  • @deucalion0 稍等。
  • @deucalion0 我更新了问题,并在更重要的行中添加了 cmets 并进行了解释。
  • 非常感谢,我现在就看看这个,花点时间试试,再次感谢!
  • 效果很好,感谢您的专业方法和详细的解释,对我的问题的总体回答很好! sajmon_d,你似乎对android有很好的了解,让你看看我的另一个问题的正确方法是什么,我不知道这是否允许在SO上。再次感谢!!!!
【解决方案2】:

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

【讨论】:

  • 这正是我的目标!!!我只是不知道该怎么做,关于如何编写代码的任何建议?谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-19
  • 2017-06-20
  • 1970-01-01
  • 1970-01-01
  • 2016-07-17
  • 1970-01-01
  • 2016-08-17
相关资源
最近更新 更多