-2

ループを使用せずにすべてのレコードを取得するにはどうすればよいですか。ループは1000以上のレコードを取得するための良い方法ではありません。

例えば:

public List<Contact> getAllContacts() {
    List<Contact> contactList = new ArrayList<Contact>();
    String selectQuery = "SELECT  * FROM " + TABLE_CONTACTS;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);
    if (cursor.moveToFirst()) {
        do {
            Contact contact = new Contact();
            contact.setID(Integer.parseInt(cursor.getString(0)));
            contact.setName(cursor.getString(1));
            contact.setPhoneNumber(cursor.getString(2));
            // Adding contact to list
            contactList.add(contact);
        } while (cursor.moveToNext());
    }
    return contactList;

しかし、これはそうするための最良の方法ではありません。5000以上のレコードがあると考えてください。このタスクを完了するのにどれくらいの時間がかかりますか。

あなたはどのように思いますか ?

よろしく、

4

3 に答える 3

1
Select * from table;

それで全部です...

Androidの場合:

Cursor cursor = database.query(SQLiteHelper.TABLE_YOURTABLE,
    allColumns, null, null, null, null, null);

結果を反復処理するためのより明確な方法だと思います。

cursor.moveToFirst();
while (!cursor.isAfterLast()) {
  Contact contact = new Contact();
        contact.setID(Integer.parseInt(cursor.getString(0)));
        contact.setName(cursor.getString(1));
        contact.setPhoneNumber(cursor.getString(2));
        // Adding contact to list
        contactList.add(contact);
}
于 2013-03-15T08:25:07.437 に答える
0

何千ものレコードのロードを回避する唯一の方法は、ロードを少なくすることです。(とにかく、何千ものエントリを画面に収めることはできません。)

リストに何らかの形式の遅延読み込みを実装することをお勧めします。

于 2013-03-15T09:11:49.767 に答える
0

それCursor自体がアイテムの「リスト」を表します。そのため、データベースから取得した後、データをどのように処理する必要があるかを尋ねました...

にスプラッシュするだけでよい場合はListView、を使用しますCursorAdapter。また、「リスト」を解析してネットワーク上にアイテムを送信したり、に表示する以外のものを送信したりするListView必要がある場合でも、実際のリストは必要ありません。から直接必要なアイテムを抽出してCursor送信するだけです。

繰り返すという欠点がありますが、もう一度指摘する必要があります。それは、データをどのように処理するかによって異なります。

于 2013-03-15T09:13:09.913 に答える