如何从SQLite获取记录总数

时间:2011-05-08 05:28:38

标签: android sqlite

我正在尝试从Sqlite DB获取行的总数。以下是我要做的事情的代码片段。

我不知道我在这里做错了什么?

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:ERROR / getTotalCount(440):android.database.CursorIndexOutOfBoundsException:请求索引-1,大小为1

enter image description here

5 个答案:

答案 0 :(得分:3)

尝试c.getInt(0);

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

还在rawQuery行之后放置c.moveToFirst();以获得良好的衡量标准。

答案 1 :(得分:2)

假设WORD_COLword?您尚未请求名为word的列。你有一个专栏COUNT(word),这是完全不同的事情;因此,当您尝试获取word的数据时,getColumnIndex无法找到它,为您提供无意义的-1索引,然后导致getInt失败,因为没有人计算来自-1。 :)

您也可以将列重命名为更好的列:SELECT COUNT(word) AS word_count FROM...,然后请求该名称。另一种选择是,你知道这个查询只返回一列,不需要命名它;只是直接使用它的索引。

答案 2 :(得分:1)

rawQuery之后,尝试

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

答案 3 :(得分:1)

试试这个:

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

的问候, Nital Shah

答案 4 :(得分:0)

您可能拥有此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)