Как получить количество строк запроса в Android, используя SQLite?

48

Как получить количество строк запроса в Android с помощью SQLite? Кажется, мой следующий метод не работает.

public int getFragmentCountByMixId(int mixId) {
    int count = 0;
    SQLiteDatabase db = dbOpenHelper.getWritableDatabase();

    Cursor cursor = db.rawQuery(
        "select count(*) from downloadedFragement where mixId=?",
        new String[]{String.valueOf(mixId)});
    while(cursor.moveToFirst()){
        count = cursor.getInt(0);
    }
    return count;
}    
  • 0
    Не имеет отношения к вопросу: вы не можете перемещать курсор, вызывая «moveToFirst» бесконечно. Вы должны вызвать его один раз, а затем использовать while (cursor.moveToNext ()) {...
Теги:
count
row

8 ответов

107
Лучший ответ

Cursor.getCount()

  • 4
    Я не знаю, как это будет работать с вашей текущей реализацией, но если вы просто измените count (*) на *, это должно сработать.
  • 2
    Я думаю, что лучшее решение return (int) DatabaseUtils.longForQuery(mDB, "SELECT COUNT(*) FROM table_name", null);
Показать ещё 1 комментарий
7
cursor.moveToNext();
cursor.getCount();

Если moveToNext() не вызывается, может возникнуть курсорIndexOutOfBoundException.

  • 0
    Я так не думаю
3

Это было бы более эффективно, потому что работа для всех версий:

int numRows = DatabaseUtils.longForQuery(db, "SELECT COUNT(*) FROM table_name", null);

или

int numRows = DatabaseUtils.queryNumEntries(db, "table_name");

или, если вы хотите получить количество строк, которые имеют конкретный выбор, тогда вы должны пойти с (добавлен в API 11)

public static long queryNumEntries (SQLiteDatabase db, String table, String selection)

Спасибо:)

  • 0
    В первом примере вы используете longForQuery (). Я думал, что метод возвращает значение только в первом столбце первой строки. Так как же это показать общее количество строк в базе данных? Это потому, что запрос SELECT COUNT (*) выполняется для полной базы данных?
0
val query = "SELECT * FROM $TABLE_NAME ;"
val result = db.rawQuery(query,null)
Toast.makeText(ctx,result.count,Toast.LENGTH_SHORT).show()
0
 public long getRecords() {
    return DatabaseUtils.longForQuery(db, "SELECT COUNT(*) FROM contacts", null);
}

Вы можете использовать это как метод или использовать это, если ваша база данных использует автоинкремент

 public long getRecords() {
    return DatabaseUtils.longForQuery(db, "SELECT seq FROM sqlite_sequence", null);
}
0

В DatabaseUtils

public static long queryNumEntries(SQLiteDatabase db, String table)
  • 0
    Что делать, если это база данных в памяти, без имени базы данных?
  • 0
    Является ли "DatabaseUtils.queryNumEntries" хорошим выбором или устарел?
0

используйте строку вместо int

String strCount = "";
int count = 0;
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();

Cursor cursor = db.rawQuery(
    "select count(*) from downloadedFragement where mixId=?",
    new String[]{String.valueOf(mixId)});

while(cursor.moveToFirst()){
    strCount = cursor.getString(cursor.getColumnIndex("COUNT(*)"));
}
count = Integer.valueOf(strCount).intValue();
0

Запрос для столбца _ID в таблице, а затем вызовите getCount на курсор. Вот ссылка которую я делаю в одном из моих проектов. Посмотрите на номер строки 110.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню