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

就这样...

在安卓中:

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. 即使您需要解析“列表”并在网络上发送一些项目或在 a 中显示以外的其他内容ListView,您仍然不需要实际的列表。只需直接从中提取您需要的物品Cursor并将它们发送出去。

由于重复自己的缺点,我应该再次指出:这实际上取决于您想对数据做什么。

于 2013-03-15T09:13:09.913 回答