#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)