我正在尝试从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
答案 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_COL
是word
?您尚未请求名为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)