Android Курсор SQLite за пределы исключение на ИЗБРАННОМ количестве (*) таблица FROM

Следующая функция дает мне за пределы исключение...

public void count(){
    SQLiteDatabase db = table.getWritableDatabase();
    String count = "SELECT count(*) FROM table";
    Cursor mcursor = db.rawQuery(count, null);
    int icount = mcursor.getInt(0);
    System.out.println("NUMBER IN DB: " + icount);
}

Это предназначено для возврата количества строк в базе данных. Кто-либо знает что случилось? я, возможно, делаю эту задачу неправильный путь?

13
задан Pentium10 22 June 2010 в 15:06
поделиться

2 ответа

Вы упустили

mcursor.moveToFirst();

public void count(){
    SQLiteDatabase db = table.getWritableDatabase();
    String count = "SELECT count(*) FROM table";
    Cursor mcursor = db.rawQuery(count, null);
    mcursor.moveToFirst();
    int icount = mcursor.getInt(0);
    System.out.println("NUMBER IN DB: " + icount);
}

Но для этой задачи следует использовать более эффективные методы, например, встроенные помощники DatabaseUtils

такие как

public long count() {
    return DatabaseUtils.queryNumEntries(db,'tablename');
}

Вы можете найти полезным использование DatabaseUtils.longForQuery() для получения длинного значения первого столбца, когда у вас есть запрос where для общего количества. Это проще, и вам не нужно работать с курсором.

47
ответ дан 1 December 2019 в 17:39
поделиться

необходимо переместить курсор в первую (и единственную) строку

Cursor mcursor = db.rawQuery(count, null);
mcursor.moveToFirst();
int icount = mcursor.getInt(0);
3
ответ дан 1 December 2019 в 17:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: