Как получить общее количество записей из SQLite

#android #sqlite

#Android #sqlite

Вопрос:

Я пытаюсь получить общее количество строк из базы данных Sqlite. Ниже приведен фрагмент кода того, что я пытаюсь сделать.

Я не знаю, что я здесь делаю не так?

 public static int getTotalCount(Context _context)
{
Cursor c = null;
try
{
    c = getInstance(_context).db.rawQuery("SELECT COUNT(word) FROM  "
          WORD_TABLE, null);

    return c.getInt(c.getColumnIndex(WORD_COL));

} catch (Exception e)
{
    Log.e("getTotalCount", e.toString());
}
return 0;
  

Сообщение об исключении :
05-08 05:21:19.934: ОШИБКА / getTotalCount(440): android.database.Исключение CursorIndexOutOfBoundsException: запрошен индекс -1 с размером 1

введите описание изображения здесь

Ответ №1:

Попробуйте c.getInt(0);

или

  c = getInstance(_context).db.rawQuery("SELECT COUNT(word) as WORD_COL FROM  "
      WORD_TABLE, null);
  

также для пущей убедительности поставьте c.moveToFirst(); сразу после строки rawQuery.

Ответ №2:

Предполагая, что WORD_COL это word ? Вы не запрашивали столбец с именем word . У вас есть столбец COUNT(word) , а это совершенно другое дело; таким образом, когда вы пытаетесь извлечь данные для word , getColumnIndex вам не удается их найти, что дает вам бессмысленный индекс -1 , который затем приводит к getInt сбою, поскольку никто не считает с -1 начала. 🙂

Вы также можете переименовать столбец во что-нибудь более приятное: SELECT COUNT(word) AS word_count FROM... , затем запросить это имя. Другой вариант заключается в том, что вы знаете, что этот запрос возвращает только один столбец, нет необходимости называть его; просто используйте его индекс напрямую.

Ответ №3:

После rawQuery попробуйте

 c.moveToFirst();
return c.GetInt(0);
  

Ответ №4:

попробуйте это:

 Cursor c  = _sqlDatabase.rawQuery("Select * from table", null);
System.out.println("Count:" c.getCount());
  

с уважением,
Нитал Шах

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

1. это приведет к извлечению всех строк в таблице, он только хотел узнать количество.

2. это не имеет значения.. Разница в стоимости запроса простого или более сложного запроса (просто подсчитать или извлечь данные) с небольшим объемом данных настолько мала, что требуется больше для извлечения всего и подсчета результатов.. Затем позже он может даже использовать результаты без повторного запроса

Ответ №5:

Возможно, у вас это CursorIndexOutOfBoundsException потому, что курсор не указывает на первый результат.

Попробуйте это:

 try
{
    c = getInstance(_context).db.rawQuery("SELECT COUNT(word) FROM  "
          WORD_TABLE, null);
    c.moveToFirst();
    return c.getInt(c.getColumnIndex(WORD_COL));

} catch (Exception e)