SELECT count(*)FROM表上的Android SQLite Cursor超出范围异常


问题内容

下面的函数给了我一个超出范围的异常…

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);
}

它的目的是返回数据库中的行数。有人知道怎么了吗?我是否可能以错误的方式执行此任务?


问题答案:

你错过了

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');
}

DatabaseUtils.longForQuery()当您在何处查询总计数时,使用第一列长值可能会有所帮助。它更简单,您不需要使用Cursor进行大量工作。