Android SQLite Cursor out of bounds exception on SELECT count(*) from table

2022-09-04 05:15:54

以下函数为我提供了一个越界异常...

public void count(){
    SQLiteDatabase db = table.getWritableDatabase();
    String count = "SELECT count(*) FROM table";
    Cursor mcursor = db.rawQuery(count, null);
    int icount = mcursor.getInt(0);
    System.out.println("NUMBER IN DB: " + icount);
}

它旨在返回数据库中的行数。有人知道出了什么问题吗?我可能以错误的方式执行此任务吗?


答案 1

你错过了

mcursor.moveToFirst();

public void count(){
    SQLiteDatabase db = table.getWritableDatabase();
    String count = "SELECT count(*) FROM table";
    Cursor mcursor = db.rawQuery(count, null);
    mcursor.moveToFirst();
    int icount = mcursor.getInt(0);
    System.out.println("NUMBER IN DB: " + icount);
}

但是您应该为此任务使用更好的方法,例如DatabaseUtils的内置帮助程序

public long count() {
    return DatabaseUtils.queryNumEntries(db,'tablename');
}

当您对总计数进行何处查询时,您可能会发现用于获取第一列长值很有用。它更简单,您不需要使用Cursor进行大量工作。DatabaseUtils.longForQuery()


答案 2

需要将游标移动到第一行(也是唯一一行)

Cursor mcursor = db.rawQuery(count, null);
mcursor.moveToFirst();
int icount = mcursor.getInt(0);

推荐