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

配列リストの作成方法は知っていますが、1つのインデックスに6つの文字列を格納する方法がわかりません。2D配列リストを試してみましたが、これは複雑すぎるようで、正しい方法だとは思いませんでした。 。これを行うためのより良い方法はありますか?そうでない場合は、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;
   }
}

次に作成すると、 SQLiteからArrayListにArrayList<Foo>データを簡単に保存できます。

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

注:このアプローチをお勧めします。それは明確で、安全で、効果的です。データソース、カーソルがすでに開いている、データベースがすでに閉じているなどの通常スローされる例外を回避するために、作業が完了した後にカーソルを解放することを忘れないでください。

アップデート:

定義されたオブジェクトとゲッターおよびセッターを使用したクラスの例についてはよくわかりませんが、これを試す前に詳しく説明していただけますか?ありがとうございました!!

したがって、ゲッターとセッターは、カプセル化を維持するためにオブジェクトのプロパティを操作するために「一般的に」使用されるメソッドです。これは、OOPで非常に重要なことです。セッターはプロパティを初期化するために使用され、ゲッターはオブジェクトのプロパティを取得するために使用されます。

今、私はあなたのためにsqliteからArrayListにデータを保存するためのメソッドの例を書きました。この行があります:

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

ここで、は1つの整数をパラメーターとして持つFoo ObjectsetId(c.getInt(0))のセッターであり、このメソッドを使用して、id値にからのデータを入力します。Cursor

于 2013-03-10T18:02:06.403 に答える
0

必要なすべての情報を含むクラスを作成し、そのインスタンスを作成してから、そのインスタンスをArrayListに追加します。

于 2013-03-10T18:01:00.447 に答える