Страницы

Поиск по вопросам

вторник, 7 апреля 2020 г.

SQLite производительность

#java #android #sql #sqlite

                    
Есть ли разница в скорости получения данных из таблицы SQLite на Android:

Первый вариант:

    ArrayList arrayList;
    Cursor c = db.rawQuery("select a,b,c from table");
    for (int i = 0; i < c.getCount(); i++) {
        arrayList.add(c.getString(0));
    }


Второй вариант:

    ArrayList arrayList;
    for(int i=0; i < count; i++){
        Cursor c = db.rawQuery("select a,b,c from table where a = " + i)
        String a = c.getString(0);
        arrayList.add(a);
    }


Мне нужен второй способ, но он вызывает у меня сомнения. Если он тратит больше времени,
то есть ли другой, более быстрый, но чтобы данные получались последовательно, вместо
возвращения целого курсора с данными?
    


Ответы

Ответ 1



Второй вариант вероятно будет работать гораздо медленнее. Если есть возможность получить все данные одним обращением к БД(1 вариант), т.к. зачем вы намеренно обращаетесь к бд множество раз(2 вариант)? А вообще просто сравните скорость выполнения первого и второго способа на большом объёме данных. Меня только смущает в вашем втором варианте i<10. Первый вариант должен выглядеть видимо так: ArrayList arrayList; Cursor c = db.rawQuery("select a,b,c from table where a>=0 and a<10"); for (int i = 0; i < c.getCount(); i++) { arrayList.add(c.getString(0)); }

Ответ 2



Я бы сделал проверку if(c.moveToFirst()), странно что вы эту команду не вызываете. А в цикле нужно использовать c.moveToNext().

Комментариев нет:

Отправить комментарий