Android SQLite Cursor исключение за пределами границ на счетчике SELECT (*) FROM - PullRequest
13 голосов
/ 22 июня 2010

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

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

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

Ответы [ 3 ]

48 голосов
/ 22 июня 2010

Вы пропустили

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(), чтобы получить значение для первого столбца, когда у вас есть запрос на общее количество. Это проще, и вам не нужна эта куча работы с курсором.

3 голосов
/ 22 июня 2010

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

Cursor mcursor = db.rawQuery(count, null);
mcursor.moveToFirst();
int icount = mcursor.getInt(0);
0 голосов
/ 02 июля 2013

вы можете использовать это, если хотите получить количество строк для определенного идентификатора или значения

public int numbersOfrows (int id) {
        SQLiteDatabase db = this.getReadableDatabase();
        int numbersOfrows = 0 ;

        Cursor c = db.rawQuery("select count(*) from table_name where Column_name = 'yourValue'")
        if (c.moveToFirst()){
            numbersOfrows = c.getInt(0);
        }

        return numbersOfrows ;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...